2012-10-19 42 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