Можно ли использовать только logger в log4php?
В документации log4php они настраивают только корневой логгер. (см.: http://logging.apache.org/log4php/quickstart.html)
<configuration xmlns="http://logging.apache.org/log4php/">
<appender name="myAppender" class="LoggerAppenderFile">
<param name="file" value="myLog.log" />
</appender>
<root>
<level value="WARN" />
<appender_ref ref="myAppender" />
</root>
</configuration>
Выше приведена конфигурация ТОЛЬКО для корневого регистратора. И все же они продолжают в своем примере:
// Fetch a logger, it will inherit settings from the root logger
$log = Logger::getLogger('myLogger');
Что если я хочу только root-логгер? Тот факт, что они упускают это из виду на Quick Start, поражает воображение. Почему у меня должно быть 2 регистратора, один, который они даже не настраивают (сломает ли мой код, если я выполню этот пример? Я так думаю!), А не 1?
Таким образом, остается вопрос, как я могу использовать просто root logger?
Ответ:
После моего ранжирования я нашел ответ более подробно в их документации (см. http://logging.apache.org/log4php/docs/loggers.html):
Вызов метода static static Logger::getRootLogger() извлекает корневой логгер.
1 ответ
Вы узнали: да, вы можете использовать только корневой логгер. Но вы пропустите интересную часть. Так вот почему вы не должны использовать только корневой логгер:
Log4php позволяет создать любое произвольное имя регистратора. Вы можете записать это имя регистратора в цель журнала, если хотите, т.е. 2014-06-11 12:15 TheLoggerName Here is the message
возможно.
Почему это было бы интересно? Потому что это помогает добавить контекст в сообщение журнала.
Один из подходов состоит в том, чтобы определить несколько отдельных имен регистратора для особых задач регистрации, таких как регистратор для сообщений безопасности ("пользователь вошел в систему", "неверный пароль", "нарушения доступа"), контрольные журналы, базы данных и т. Д.
Другой подход заключается в кодировании имени класса в имени регистратора. Таким образом, вы можете напрямую видеть, из какого класса пришло сообщение журнала, что поможет вам найти источник сообщения. Вы просто конвертируете обратную косую черту и подчеркивание в точки, а затем получаете имя регистратора (при условии, что PSR-0/4 соответствуют именам классов).
И если вы находитесь там, не имеет значения, что вы настраиваете только корневой логгер, потому что именно там в конечном итоге заканчивается каждое зарегистрированное сообщение. Но это становится лучше: сделав это, вы сможете отключить все предупреждающие сообщения от классов базы данных, но записать все до уровня отладки из клиентских классов HTTP, просто изменив конфигурацию журнала.
Возможно, для вас это будет звучать излишне, и я могу сказать по своему опыту, что в большинстве случаев делать сложную конфигурацию не то, что нужно, но лучше делать это при необходимости, чем не иметь возможности сделать это. потому что там был только корневой логгер. И та часть, в которой вы знаете, откуда пришло сообщение журнала, мгновенно окупится, если вы включите имя в шаблон форматирования.