multiple log4j instance configuration

2019-06-04 22:32发布

问题:

I want to use multiple instances of the log4j Logger. I need to attach different Properties objects to each of these log4j Logger instances.

Here is the code to configure for one instance:

LOG4J = org.apache.log4j.Logger.getLogger(Logger.class);

Properties log4jProps = new Properties();

...

PropertyConfigurator.configure(log4jProps);

What if I want to have two log4j instance and each of them has different properties?

回答1:

Can you explain why you want multiple loggers in more detail? I don't think it's possible to have multiple log4j instances.

If you just want multiple appenders, look here:

  • http://www.velocityreviews.com/forums/t721794-log4j-different-logger-instances.html

Here's the log4j.properties from the above link:

# logj4.properties
log4j.rootCategory = WARN, A
log4j.category.com.lewscanon = WARN, F
log4j.category.com.lewscanon.mouser = DEBUG, X

log4j.appender.A = org.apache.log4j.ConsoleAppender
log4j.appender.A.layout = org.apache.log4j.PatternLayout

log4j.appender.F = org.apache.log4j.RollingFileAppender
log4j.appender.F.layout = org.apache.log4j.PatternLayout
log4j.appender.F.File = /projects/mouser/logs/lewscanon.log
log4j.appender.F.MaxFileSize = 512KB
log4j.appender.F.MaxBackupIndex = 2

log4j.appender.X = org.apache.log4j.RollingFileAppender
log4j.appender.X.layout = org.apache.log4j.PatternLayout
log4j.appender.X.File = /projects/mouser/logs/mouser.log
log4j.appender.X.MaxFileSize = 512KB
log4j.appender.X.MaxBackupIndex = 2

log4j.appender.A.layout.ConversionPattern= %d %-16c{1}:%-39m %-t %x%n
log4j.appender.F.layout.ConversionPattern= %d %-16c{1}:%-39m %-t %x%n
log4j.appender.X.layout.ConversionPattern= %d %-16c{1}:%-39m %-t %x%n

These lines:

log4j.rootCategory = WARN, A
log4j.category.com.lewscanon = WARN, F
log4j.category.com.lewscanon.mouser = DEBUG, X

say the following:

  • Log everything to appender A (which is console). Only log warnings and above
  • Log everything from com.lewscanon package to appender F (which goes to file lewscanon.log). Only log warnings and above
  • Log everything from com.lewscannon.mouser package to appender X (which goes to file mouser.log). Only log debug and above

It's also possible to supply full class names:

log4j.category.com.lewscanon.SomeClass = WARN, F

means log everything from com.lewscanon.SomeClass class to appender F, level warn and above.

I suppose the above is granular enough, but if you absolutely need it more granular (I don't think that's practical enough, though), per:

  • http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Logger.html

Logger.getLogger(String name) accepts names. So you can do something like:

log4j.category.myFancyLogger = INFO, F

and use Logger.getLogger("myFancyLogger") to get the logger that logs to appender F with level info.



标签: java log4j