2013-11-25 60 views
1

似乎log4php的LoggerAppenderMongoDB不需要佈局,即使在config.xml文件中指定了佈局,它甚至不會使用任何佈局,至少默認情況下不使用任何佈局。如何強制LoggerAppenderMongoDB使用佈局?

劑量有人知道如何強制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是不是。

回答

0

MongoDB appender不提供使用佈局,因爲已記錄的事件以結構化的方式寫入Mongo:您將能夠獲取不同的信息,而無需將它們全部合併到一行中。

現在我並不是說appender會保留所有可能的信息,因爲appender只會用這些信息填充文檔:'timestamp','level','thread','message','loggerName',' fileName','method','lineNumber','className','exception'。

似乎缺少的是放入MDC或NDC(映射診斷上下文,嵌套診斷上下文)的信息,如果您使用並需要它,這是一個非常不錯的功能。還缺少的是您嘗試添加到佈局中的內容:$ _SERVER的遠程IP地址和端口。我建議你做一個功能請求來添加這些信息。

與此同時,您可能能夠擴展現有的appender以適應您自己的需求。