2

I want my log files show only their log level information.I mean info.log should show only info logs not error or warn or debug logs. I could do that by instantiating object for each log level.I mean I have _traceLogger, _infoLogger, _warnLogger etc. for all levels.And it is not what I want. Here is my log4j.properties file.

log4j.rootLogger=TRACE,TraceFileAppender,DebugFileAppender,InfoFileAppender,WarnFileAppender,ErrorFileAppender,FatalFileAppender

# TraceFileAppender - used to log messages in the trace.log file.
log4j.appender.TraceFileAppender=org.apache.log4j.FileAppender
log4j.appender.TraceFileAppender.File=./logs/trace.log
log4j.appender.TraceFileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.TraceFileAppender.layout.ConversionPattern=[%-5p]%d{yyyy-MM-dd HH:mm:ss} - %m%n

# DebugFileAppender - used to log messages in the debug.log file.
log4j.appender.DebugFileAppender=org.apache.log4j.FileAppender
log4j.appender.DebugFileAppender.File=./logs/debug.log
log4j.appender.DebugFileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.DebugFileAppender.layout.ConversionPattern=[%-5p]%d{yyyy-MM-dd HH:mm:ss} - %m%n

# InfoFileAppender - used to log messages in the info.log file.
log4j.appender.InfoFileAppender=org.apache.log4j.FileAppender
log4j.appender.InfoFileAppender.File=./logs/info.log
log4j.appender.InfoFileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.InfoFileAppender.layout.ConversionPattern=[%-5p]%d{yyyy-MM-dd HH:mm:ss} - %m%n

# WarnFileAppender - used to log messages in the warn.log file.
log4j.appender.WarnFileAppender=org.apache.log4j.FileAppender
log4j.appender.WarnFileAppender.File=./logs/warn.log
log4j.appender.WarnFileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.WarnFileAppender.layout.ConversionPattern=[%-5p]%d{yyyy-MM-dd HH:mm:ss} - %m%n

# ErrorFileAppender - used to log messages in the error.log file.
log4j.appender.ErrorFileAppender=org.apache.log4j.FileAppender
log4j.appender.ErrorFileAppender.File=./logs/error.log
log4j.appender.ErrorFileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.ErrorFileAppender.layout.ConversionPattern=[%-5p]%d{yyyy-MM-dd HH:mm:ss} - %m%n

# FatalFileAppender - used to log messages in the fatal.log file.
log4j.appender.FatalFileAppender=org.apache.log4j.FileAppender
log4j.appender.FatalFileAppender.File=./logs/fatal.log
log4j.appender.FatalFileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.FatalFileAppender.layout.ConversionPattern=[%-5p]%d{yyyy-MM-dd HH:mm:ss} - %m%n


log4j.logger.trace=TRACE,TraceFileAppender
log4j.logger.debug=DEBUG,DebugFileAppender
log4j.logger.info=INFO,InfoFileAppender
log4j.logger.warn=WARN,WarnFileAppender
log4j.logger.error=ERROR,ErrorFileAppender
log4j.logger.fatal=FATAL,FatalFileAppender

Is there any way to do that with instantiating only one logger object for all?

Here is java code:

   PropertyConfigurator.configure("log4j.properties");
        _traceLogger = org.apache.log4j.Logger.getLogger("trace");
        _debugLogger = org.apache.log4j.Logger.getLogger("debug");
        _infoLogger = org.apache.log4j.Logger.getLogger("info");
        _warnLogger = org.apache.log4j.Logger.getLogger("warn");
        _errorLogger = org.apache.log4j.Logger.getLogger("error");
        _fatalLogger = org.apache.log4j.Logger.getLogger("fatal");

With this code, it works as expected.But I need one logger object.

*Edit

I think, I need something like upper-boundary. I mean there is threshold and every appender needs upper-boundary too. Correct me if I am wrong.

As pointed out in comments.This question already has an answer here:

can we have level based log files using log4j
log different log levels to different files with log4j

Community
  • 1
  • 1
ozzimpact
  • 111
  • 8
  • Since the separation of appenders can achieve what you want (different lvl for different files), may I ask what's the rational behind your idea of combining all into one logger object? – Wilts C Jan 30 '15 at 09:17
  • Well, it seems inefficient to me. (Creating multiple obejcts). In .Net side nlog does what i want. One logger object can map all levels to different files. – ozzimpact Jan 30 '15 at 09:21
  • 1
    In log4j you have to use a _filter_ if you want an appender to log messages at a particular level but not also higher level messages too - see [this answer](http://stackoverflow.com/a/28092674/592139) for details of how to configure this using log4j.properties – Ian Roberts Jan 30 '15 at 09:28

0 Answers0