是否可以在log4php中仅使用根记录器?

时间:2014-06-04 16:41:17

标签: php 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');

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

所以问题仍然存在,我如何只使用根记录器?

答案:

在我的测距之后,我在他们的文档中更深入地找到了答案(参见http://logging.apache.org/log4php/docs/loggers.html):

  

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

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