如何强制LoggerAppenderMongoDB使用布局?

时间:2013-11-25 23:32:16

标签: mongodb log4php

似乎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的日志不是。

1 个答案:

答案 0 :(得分:0)

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

现在我并不是说appender确实保留了所有可能的信息,因为appender只用这些信息填充文档:'timestamp','level','thread','message','loggerName','fileName ','method','lineNumber','className','exception'。

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

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