2016-05-16 101 views
1

我想使用log4j在我的tomcat安裝上的某個不同文件上記錄某些消息,但它雖然在我的rootLogger上登錄,但它不會在我創建的單獨文件上執行此操作。如何配置tomcat使用log4j登錄不同的文件?

這裏是我的log4j.properies文件,其中我試圖使用該文件是dataflow_logging.log:

# Root logger option 
log4j.rootLogger=INFO, stdout, mainlogger 

# Direct dataflow specific messages to specific file. 
log4j.logger.org.estat.nsiws.dataflows=INFO, dataflowlogger 
log4j.appender.dataflowlogger=org.apache.log4j.RollingFileAppender 
log4j.appender.dataflowlogger.File=${catalina.home}/logs/nsi/dataflow_logging.log 
log4j.appender.dataflowlogger.MaxFileSize=10MB 
log4j.appender.dataflowlogger.MaxBackupIndex=10 
log4j.appender.dataflowlogger.layout=org.apache.log4j.PatternLayout 
log4j.appender.dataflowlogger.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

# Disable dataflow log messages in root logger. 
log4j.additivity.org.estat.nsiws.dataflows=false 

# Direct main logging messages to standard output. 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss,SSS} [%p]: %m%n 

# Also direct main logging messages to file. 
log4j.appender.mainlogger=org.apache.log4j.RollingFileAppender 
log4j.appender.mainlogger.File=${catalina.home}/logs/nsi/nsiws.log 
log4j.appender.mainlogger.MaxFileSize=10MB 
log4j.appender.mainlogger.MaxBackupIndex=10 
log4j.appender.mainlogger.layout=org.apache.log4j.PatternLayout 
log4j.appender.mainlogger.layout.ConversionPattern=%d{HH:mm:ss,SSS} [%p]: %m%n 

我的web服務的屬性文件:

## This file contains properties for the Web Service 

# The absolute path to the logs directory 
log.directory=logs/nsi 

# The log file prefix 
log.file.prefix=nsiws_ 

# The log file suffix 
log.file.suffix=.log 

# The prefix of the temporary files created for the buffering of responses. 
tempfile.buffer.prefix=ws_resp 

# Enable logging dataflow access 
log.df.file.activation=true 

# The absolute path to the dataflow logs directory 
log.df.file.directory=logs/nsi 

# The dataflow log file prefix 
log.df.file.name=dataflow_logging 

# The dataflow log file maximum size 
log.df.file.max.size=100MB 

# The dataflow max backup file 
log.df.file.max.backup=10 

# The dataflow log file separator 
log.df.file.separator=; 

# The dataflow log file date pattern 
log.df.date.pattern=%d{yyyy-MM-dd HH:mm:ss,SSS};%m%n 

是初始化的方法數據流記錄器:

private static Logger initDataflowLogger() { 
     Logger dflogger = null; 

     try { 
      if (Boolean.parseBoolean(nsiProps.getProperty("log.df.file.activation"))) { 
       dflogger = org.apache.log4j.Logger.getLogger("org.estat.nsiws.dataflows"); 
       dflogger.setLevel(Level.INFO); 
       logger.debug("Initializing dataflow logging..."); 
      } 
     } catch (Exception e) { 
      logger.error(getInstance().getMessage("error.df.log.properties.not.set")); 
     } 

     return dflogger; 
} 

非常感謝您的幫助!

回答

1

檢查該表達式爲true,如果你已經正確設置了你的屬性文件,所以你的項目可以讀取它。

Boolean.parseBoolean(nsiProps.getProperty("log.df.file.activation")) 
+0

你說得對。我沒有正確設置文件,所以表達總是錯誤的... –

0
  1. 您的根記錄器處於INFO模式。
  2. 哪些不會記錄調試級別語句。
  3. 您已經採取org.estat.nsiws.dataflows的實例(dataflowlogger追加程序),這是「dflogger」,但你實際上是調用「logger.debug」