2012-10-19 39 views
0

我想允許用戶指定他們想要寫入Windows事件查看器的級別,但是我還將日誌寫入控制檯和輸出文件。是否有辦法將所有日誌寫入文件和控制檯,並且只將更高級別的日誌寫入事件查看器,而不必具有兩個單獨的Logger變量。Log4j Windows事件查看器日誌記錄

private static PatternLayout myLayout 
    = new PatternLayout("%-4r [%t] %-5p %c %x - %m%n"); 
// Read from INI file 
private static boolean enableWindowsEventLogging; 
static final Logger log4jLogger = Logger.getLogger(Main.class); 
private static NTEventLogAppender eventLogAppender = new NTEventLogAppender(); 
private static RollingFileAppender rollingFileAppender; 
private static ConsoleAppender consoleAppender = new ConsoleAppender(myLayout); 
    .... 
if(enableWindowsEventLogging) 
{ 
    switch(Integer.valueOf(thisProperties.getProperty("warningLevel"))) 
{ 
    case 1: log4jLogger.setLevel(Level.ALL); break; 
    case 2: log4jLogger.setLevel(Level.FATAL); break; 
    case 3: log4jLogger.setLevel(Level.ERROR); break; 
    case 4: log4jLogger.setLevel(Level.WARN); break; 
    case 5: log4jLogger.setLevel(Level.INFO); break; 
    case 6: log4jLogger.setLevel(Level.DEBUG); break; 
}; 
// Event viewer logging 
log4jLogger.addAppender(eventLogAppender); 
}else 
log4jLogger.setLevel(Level.OFF); 
    .... 
rollingFileAppender = new RollingFileAppender(myLayout,"\\logs\\log4joutput.log", true); 

我使用Apache 1.2.12的log4j

回答

1

沒錯記住事件是由Logger拿起如果匹配的標準,然後被寫入記錄儀的相關Appenders

所以設置記錄到你想從你的應用程序(DEBUG)捕捉到的最低水平,在NT的appender到更高的水平(INFO)和控制檯和文件追加程序到較低水平(DEBUG

+0

好。謝謝。我發現我需要使用'appendername.setThreshold()' – themaniac27