1

似乎 log4php 的 LoggerAppenderMongoDB 不需要布局,即使您在 config.xml 文件中指定了布局,它也至少默认不使用任何布局。

有人知道如何强制 log4php LoggerAppenderMongoDB 使用 config.xml 中的指定布局吗?

我的 config.xml 看起来像:

<appender name="myConsoleAppender" class="LoggerAppenderConsole" />

<appender name="myFileAppender" class="LoggerAppenderFile">
    <layout class="LoggerLayoutPattern">
        <param name="conversionPattern" value="%date  %server{REMOTE_ADDR}:%server{REMOTE_PORT} [%logger] %message%newline" />
    </layout>
    <param name="file" value="myLog.log" />
</appender>

<appender name="myMongoDBAppender" class="LoggerAppenderMongoDB">

    <layout class="LoggerLayoutPattern">
        <param name="conversionPattern" value="%date  %server{REMOTE_ADDR}:%server{REMOTE_PORT} [%logger] %message%newline" />
    </layout>

    <param name="host" value="mongodb://xxxxx" />
    <param name="port" value="xxxx" />
    <param name="databaseName" value="xxxxx" />
    <param name="collectionName" value="xxxx" />
</appender>

<logger name="myLogger">
    <appender_ref ref="myMongoDBAppender" />
</logger>

<root>
    <appender_ref ref="myFileAppender" />
</root>

现在去文件的日志使用指定的布局,但去 MongoDB 的不是。

4

1 回答 1

0

MongoDB appender 不提供使用布局,因为记录的事件以结构化方式写入 Mongo:您将能够获取不同的信息,而无需将它们全部合并到一行中。

现在我并不是说 appender 确实保留了所有可能的信息,因为 appender 只用以下信息填充文档:'timestamp'、'level'、'thread'、'message'、'loggerName'、'fileName'、'方法','lineNumber','className','异常'。

似乎缺少的是放入 MDC 或 NDC(映射诊断上下文,嵌套诊断上下文)的信息,如果您使用并需要它,这是一个非常好的功能。还缺少的是您尝试添加到布局中的内容:来自 $_SERVER 的远程 IP 地址和端口。我建议您提出功能请求以添加这些信息。

同时,您也许可以扩展现有的 appender 以满足您自己的需求。

于 2013-11-28T00:46:48.167 回答