2013-01-19 63 views
0

以下是log4j屬性和Java代碼。所有日誌都只能在Debug中記錄。我甚至嘗試添加閾值,但沒有運氣。我需要根據日誌級別將日誌語句記錄在單獨的文件中。根據Java中log4j的級別進行日誌記錄

所有日誌都只在調試日誌文件中記錄,如果我刪除調試日誌,那麼它將獲取登錄信息日誌文件。

給予閾值選項也不起作用。

log4j.rootLogger = OFF 

#define the console appender 
log4j.appender.consoleAppender = org.apache.log4j.ConsoleAppender 
# now define the layout for the appender 
log4j.appender.consoleAppender.layout = org.apache.log4j.PatternLayout 
log4j.appender.consoleAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 

# now define the rollingFIle appender 
log4j.category.com=error, myErrorappender 
log4j.additivity.com=false 
log4j.appender.myErrorappender=org.apache.log4j.RollingFileAppender 
log4j.appender.myErrorappender.File=/Users/uthaman/Documents/workspace/Logging/myErrorlog.log 
log4j.appender.myErrorappender.MaxFileSize=2MB 
log4j.appender.myErrorappender.MaxBackupIndex=2 
log4j.appender.myErrorappender.layout = org.apache.log4j.PatternLayout 
log4j.appender.myErrorappender.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c (%F:%L) - %m%n 


log4j.category.com=info,myInfoappender 
log4j.additivity.com=false 
log4j.appender.myInfoappender=org.apache.log4j.RollingFileAppender 
log4j.appender.myInfoappender.File=/Users/user/Documents/workspace/Logging/myInfolog.log 
log4j.appender.myInfoappender.MaxFileSize=2MB 
log4j.appender.myInfoappender.MaxBackupIndex=2 
log4j.appender.myInfoappender.layout = org.apache.log4j.PatternLayout 
log4j.appender.myInfoappender.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c (%F:%L) - %m%n 

log4j.category.com=debug,myDebugappender 
log4j.additivity.com=false 
log4j.appender.myDebugappender=org.apache.log4j.RollingFileAppender 
log4j.appender.myDebugappender.File=/Users/user/Documents/workspace/Logging/myDebuglog.log 
log4j.appender.myDebugappender.MaxFileSize=2MB 
log4j.appender.myDebugappender.MaxBackupIndex=2 
log4j.appender.myDebugappender.layout = org.apache.log4j.PatternLayout 
log4j.appender.myDebugappender.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c (%F:%L) - %m%n 

這是java代碼中的日誌語句記錄:

public class Logging { 

    private static Logger logger = Logger.getLogger(Logging.class); 

    public static void main(String[] args) { 
     logger.error("This is error"); 
     logger.info("This is info"); 
     logger.debug("This is debug"); 
    } 

} 
+0

'log4j.rootLogger = OFF' - 它指出'截止電平具有儘可能高的排名,並打算關閉logging.'它不應該實際登錄。 –

回答

1

我更喜歡使用log4j.xml配置,而不是log4j.properties。下面的配置(一個基本的)的作品根據需要...

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" > 
<log4j:configuration> 
    <appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender"> 
     <param name="file" value="log.info" /> 
     <param name="datePattern" value="'.'yyyy-MM-dd" /> 
     <param name="append" value="true" /> 
     <param name="threshold" value="info"/> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d [%t] %-5p %C{6} - %m%n" /> 
     </layout> 
    </appender> 

    <appender name="fileAppenderDebug" class="org.apache.log4j.DailyRollingFileAppender"> 
     <param name="file" value="log.debug" /> 
     <param name="datePattern" value="'.'yyyy-MM-dd" /> 
     <param name="append" value="true" /> 
     <param name="threshold" value="debug"/> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d [%t] %-5p %C{6} - %m%n" /> 
     </layout> 
    </appender> 

    <appender name="fileAppenderError" class="org.apache.log4j.DailyRollingFileAppender"> 
     <param name="file" value="log.error" /> 
     <param name="datePattern" value="'.'yyyy-MM-dd" /> 
     <param name="append" value="true" /> 
     <param name="threshold" value="error"/> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d [%t] %-5p %C{6} - %m%n" /> 
     </layout> 
    </appender> 

    <root> 
     <priority value="debug" /> 
     <appender-ref ref="fileAppender" /> 
     <appender-ref ref="fileAppenderDebug" /> 
     <appender-ref ref="fileAppenderError" /> 
    </root> 
</log4j:configuration> 
+0

THRESHOLD參數不只記錄指定的日誌級別,它還記錄下面的級別,是否有嚴格限制日誌級別進行記錄的方法。 – uthaman

+0

通過添加下面的過濾器,它適用於xml。 – uthaman

+1

<過濾器類= 「org.apache.log4j.varia.LevelMatchFilter」> uthaman

1

問題:

您已在log4j的配置中定義的重複鍵:

log4j.category.com=error, myErrorappender 
    log4j.additivity.com=false 

    log4j.category.com=info,myInfoappender 
    log4j.additivity.com=false 

    log4j.category.com=debug,myDebugappender 
    log4j.additivity.com=false 
  • 的Log4j 只有使用最後一個是調試appender --->「所有的日誌只在調試日誌文件中記錄」
  • 當您刪除調試appender時,信息appender將是最後一個--->「如果我刪除調試日誌,那麼它將獲取登錄信息日誌文件。」

解決方案:

log4j.category.com=debug,myDebugappender,myInfoappender,myErrorappender 
    log4j.additivity.com=false 
    log4j.appender.myDebugappender.Threshold=DEBUG 
    log4j.appender.myInfoappender.Threshold=INFO 
    log4j.appender.myErrorappender.Threshold=ERROR 

如果你必須過濾通過精確級別匹配的事件:

 log4j.appender.myDebugappender.filter=org.apache.log4j.varia.LevelMatchFilter 
    log4j.appender.myDebugappender.filter.levelToMatch=DEBUG 
    ... 
+0

更改後,我看到所有3個日誌中的日誌,但問題是,調試文件正在獲取DEBUG,INFO和ERROR日誌。 INFO文件也正在獲取INFO和ERROR日誌。如何限制這一點。 – uthaman

+0

有沒有辦法嚴格限制只將定義的日誌級別記錄到日誌文件中? – uthaman

+0

「如果您必須通過精確級別匹配來過濾事件,那麼您可以將LevelMatchFilter附加到任何appender,以通過精確級別匹配來過濾日誌記錄事件。」[http://logging.apache.org/log4j/1.2/faq.html #a2.9](http://logging.apache.org/log4j/1.2/faq.html#a2.9) –

1

您可以嘗試在配置文件中使用filter指定specific level書面寫到appender。請附示例代碼

<appender name="DEBUG" class="org.apache.log4j.ConsoleAppender"> 
      <layout class="org.apache.log4j.PatternLayout"> 
        <param name="ConversionPattern" value="[%t] %-5p %c - %m%n" /> 
      </layout> 
      <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
        <param name="levelMin" value="DEBUG" /> 
        <param name="levelMax" value="DEBUG" /> 
      </filter> 
    </appender>