1
votes

I'm using LOG4j & SLF4j.

I'm trying to separate each logging messages into a different files (info.log, warning.log and error.log).

For example, I use log4j.appender.infoFile.Threshold=INFO to filter the DEBUG messages but I don't know how to exclude also the WARN and ERROR messages. I just wanna write the INFO messages. The same thing with warning.log.

# Direct log messages to INFO log file
  log4j.appender.infoFile=org.apache.log4j.RollingFileAppender
  log4j.appender.infoFile.File=info.log 
  log4j.appender.infoFile.MaxFileSize=1MB
  log4j.appender.infoFile.MaxBackupIndex=1
  log4j.appender.infoFile.append=false 
  log4j.appender.infoFile.layout=org.apache.log4j.PatternLayout
  log4j.appender.infoFile.Threshold=INFO
3

3 Answers

1
votes

The LevelMatchFilter is what you are looking for:

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/varia/LevelMatchFilter.html

It can be added to an appender (you'll need one per log-level) and used to filter over the log-level. Just set up one each per level and have them deny everything but it's own level.

1
votes

From the doc, "Is it possible to direct log output to different appenders by level?", it says:

If you must filter events by exact level match, then you can attach a LevelMatchFilter to any appender to filter out logging events by exact level match.

Seems like it's what you're looking for.

0
votes

The final code is:

# Direct log messages to INFO log file
    log4j.appender.infoFile=org.apache.log4j.RollingFileAppender
    log4j.appender.infoFile.File=info.out 
    log4j.appender.infoFile.MaxFileSize=1MB
    log4j.appender.infoFile.MaxBackupIndex=1
    log4j.appender.infoFile.append=false 
    log4j.appender.infoFile.layout=org.apache.log4j.PatternLayout
    log4j.appender.infoFile.Threshold=INFO

    log4j.appender.infoFile.filter.a=org.apache.log4j.varia.LevelMatchFilter
    log4j.appender.infoFile.filter.a.LevelToMatch=INFO    
    log4j.appender.infoFile.filter.a.AcceptOnMatch=true 
    log4j.appender.infoFile.filter.b=org.apache.log4j.varia.LevelMatchFilter
    log4j.appender.infoFile.filter.b.LevelToMatch=ERROR    
    log4j.appender.infoFile.filter.b.AcceptOnMatch=false    
    log4j.appender.infoFile.filter.c=org.apache.log4j.varia.LevelMatchFilter
    log4j.appender.infoFile.filter.c.LevelToMatch=WARN    
    log4j.appender.infoFile.filter.c.AcceptOnMatch=false  
    log4j.appender.infoFile.filter.e=org.apache.log4j.varia.LevelMatchFilter
    log4j.appender.infoFile.filter.e.LevelToMatch=DEBUG    
    log4j.appender.infoFile.filter.e.AcceptOnMatch=false  
    log4j.appender.infoFile.filter.f=org.apache.log4j.varia.LevelMatchFilter
    log4j.appender.infoFile.filter.f.LevelToMatch=FATAL    
    log4j.appender.infoFile.filter.f.AcceptOnMatch=false  

I don't know if it's useful for somebody