我有一个Class“Example.class”。我得到了我的Logger:
private final Logger log = Logger.getLogger(Example.class);
我的log4j.properties看起来像:
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=log.txt
log4j.appender.file.MaxFileSize=1024KB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%p %t %c - %m%n
My Class通过log.info(..),log.debug(..)等登录到文件 log.txt 。
现在我希望为同一个类提供不同的记录器,例如:
private final Logger differentLogger = Logger.getLogger(Example.class);
并且此记录器应该登录到另一个文件,例如
differentLogger.info("Hello World");
//writes 'Hello World' into differentLogFile.txt
这有可能吗?
答案 0 :(得分:1)
不,该类别标识记录器。
那就是说,你不会被迫使用这个类作为类别。你可以在同一个班级中使用:
private final Logger log = Logger.getLogger(Example.class);
private final Logger differentLogger = Logger.getLogger(mylogs.different);
之后,在配置文件中,您可以定义多个appender并将每个类别分配给不同的appender。
答案 1 :(得分:0)
两次调用Logger.getLogger(Example.class)
将返回Logger
的相同或无法区分的实例。这意味着Log4J无法区分它们,它们将始终存放在同一个文件中。
解决方案很明显:使用不同的记录器!
Logger differentLogger = Logger.getLogger("differentLogger");
并配置log4j.xml
为differentLogger
使用不同的appender。