Reputation: 1119
I want to allow the user to specify what levels they want to have written to the Windows Event Viewer, however I'm also writing logs to the console and to an output file. Is there a way to write all logs to the file and console and only write higher level logs to the event viewer without having to have two separate Logger variables.
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);
I'm using Apache log4j 1.2.12
Upvotes: 0
Views: 3357
Reputation: 15363
Yep remember events are picked up by the Logger
if they match its criteria and are then written to the logger's associated Appenders
.
So set the logger to the lowest level you want to capture from your application(DEBUG
), the NT appender to the higher level (INFO
) and the console and file appenders to the lower levels (DEBUG
)
Upvotes: 1