0

在 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');

如果我只想要根记录器怎么办?他们在快速入门中忽略了这一点的事实令人难以置信。为什么我应该立即拥有 2 个记录器,一个他们甚至没有配置的记录器(如果我执行这个示例会破坏我的代码吗?我想是的!),而不是 1 个?

所以问题仍然存在,我怎样才能简单地使用根记录器?

回答:

经过我的测距,我在他们的文档中找到了更深层次的答案(请参阅http://logging.apache.org/log4php/docs/loggers.html):

调用类静态 Logger::getRootLogger() 方法检索根记录器。

4

1 回答 1

1

您发现:是的,您只能使用根记录器。但是你会错过一个有趣的部分。所以这就是为什么你不应该只使用根记录器的原因:

Log4php 允许您创建任意记录器名称。如果需要,您可以将此记录器名称记录到日志目标中,即2014-06-11 12:15 TheLoggerName Here is the message可以使用类似的行。

为什么会很有趣?因为它有助于为日志消息添加上下文。

一种方法是为特殊的日志记录问题定义一些不同的记录器名称,例如用于安全消息(“用户登录”、“密码错误”、“访问违规”)、审计跟踪、数据库内容等的记录器。

另一种方法是在记录器名称中编码类名称。这样你就可以直接看到日志消息来自哪个类,这将帮助你定位消息的来源。您只需将反斜杠和下划线转换为点,然后使用记录器名称(假设符合 PSR-0/4 的类名称)。

如果你在那里,你只配置根记录器并不重要,因为这是每条记录的消息最终都会结束的地方。但它变得更好:通过这样做,您将能够使来自数据库类的所有警告消息静音,但只需通过更改日志配置即可将所有内容从 HTTP 客户端类记录到调试级别。

你这样做可能听起来有点矫枉过正,我可以根据经验说,在大多数情况下,做一个复杂的配置不是要做的事情,但如果需要的话能够做到总比不能做到好因为只使用了根记录器。如果您在格式化模式中包含名称,那么知道日志消息来自何处的部分确实会立即得到回报。

于 2014-06-11T18:34:19.137 回答