2014-07-03 94 views
3

我想配置log4j將所有日誌記錄到我的日誌文件appender中,並將所有錯誤記錄到mongoDbAppenderlog4j + log4mongo - 配置不同級別的多個appender

如果我將mongoDbAppender添加到根記錄器,那麼它會記錄所有內容以及日誌文件。

但是,如果我創建一個單獨的記錄器並將其分配給錯誤級別或任何其他級別,它不記錄任何內容到mongoDbAppender。

以下是我的log4j.xml的樣子:

<?xml version="1.0" encoding="UTF-8"?> 

<!-- Appenders --> 
<appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Target" value="System.out" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%X{application} %X{ua} %5p %d{ISO8601} [%t] %c{1} - %m%n" /> 
    </layout> 
</appender> 

<appender name="file" class="org.apache.log4j.rolling.RollingFileAppender"> 
    <param name="file" value="/var/www/log/logfile.log"/> 
    <param name="append" value="true" /> 
    <param name="encoding" value="UTF-8" /> 
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> 
     <param name="FileNamePattern" value="logfile.%d.log.gz" /> 
    </rollingPolicy> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%X{application} %X{ua} %5p %d{ISO8601} [%t] %c{1} - %m%n" /> 
    </layout> 
</appender> 

<appender name="mongo" class="org.log4mongo.MongoDbAppender"> 
    <param name="hostname" value="localhost"/> 
    <param name="port" value="27017"/> 
    <param name="databaseName" value="test"/> 
    <param name="collectionName" value="errorBundle"/> 
</appender> 

<logger name="errorlogger"> 
    <level value="error"/> 
    <appender-ref ref="mongo" /> 
</logger> 

<!-- Root Logger --> 
<root> 
    <priority value="info" /> 
    <appender-ref ref="console" /> 
    <appender-ref ref="file" /> 
</root> 

我也嘗試將過濾器添加到MongoDB的附加器,並把它添加到根記錄器堆棧,那麼它也沒有記錄任何東西給MongoDB。

<filter class="org.apache.log4j.filter.LevelRangeFilter"> 
     <param name="LevelMin" value="error"/> 
     <param name="LevelMax" value="error"/> 
</filter> 

請幫助我,我做錯了什麼。我如何只記錄MongoDB Appender中的錯誤。

感謝你。

+0

嘗試值=「錯誤」帽子。 – iFrey

+0

不讀我最後的評論,我沒有讀得夠好,所以看看http://logging.apache.org/log4php/docs/appenders/mongodb.html,你沒有設置參數密碼既不是用戶名,併爲錯誤過濾器使用文檔http://logging.apache.org/log4php/docs/filters.html – iFrey

+0

這個例子謝謝你的回覆@iFrey,但我不需要用戶名和密碼參數,如果身份驗證是未在我的mongodb上啓用。您提到的過濾器示例是針對PHP的,而我正在使用Java實現,無論如何,我都以相同的方式實現了它。你能指出我是否錯過了一些東西。謝謝。 – Panshul

回答

0

我不知道你有沒有嘗試過,所以儘量配置您的appender的錯誤級別是這樣的:

<appender name="mongo" class="org.log4mongo.MongoDbAppender"> 
    <param name="hostname" value="localhost"/> 
    <param name="port" value="27017"/> 
    <param name="databaseName" value="test"/> 
    <param name="collectionName" value="errorBundle"/> 
    <filter class="LoggerFilterLevelRange"> 
     <param name="levelMin" value="error" /> 
     <param name="levelMax" value="error" /> 
    </filter> 
</appender>