Java 将除特定包之外的消息记录到文件

Java 将除特定包之外的消息记录到文件,java,logging,log4j,Java,Logging,Log4j,我使用log4j进行日志记录,我的要求是记录包中的所有日志 pkg1(pkg1.pkg2除外)到pkg1.log pkg1.pkg2(上述包的子包)到pkg2.log 这可能吗?我知道我可以通过定制的附加器来实现,但是有没有一种方法可以通过配置来实现呢 我正在使用下面的属性文件。这里的问题是PKG1.log也包含来自PKG2的日志 # Root logger option log4j.rootLogger=WARN, CONSOLE # Direct log messages to a

我使用log4j进行日志记录,我的要求是记录包中的所有日志

pkg1(pkg1.pkg2除外)到pkg1.log

pkg1.pkg2(上述包的子包)到pkg2.log

这可能吗?我知道我可以通过定制的附加器来实现,但是有没有一种方法可以通过配置来实现呢

我正在使用下面的属性文件。这里的问题是PKG1.log也包含来自PKG2的日志

    # Root logger option
log4j.rootLogger=WARN, CONSOLE
# Direct log messages to a log file

log4j.logger.com.pkg1=DEBUG, PKG1 log4j.appender.PKG1=org.apache.log4j.RollingFileAppender
log4j.appender.PKG1.File=logs/PKG1.log
log4j.appender.PKG1.MaxFileSize=1MB
log4j.appender.PKG1.MaxBackupIndex=1
log4j.appender.PKG1.layout=org.apache.log4j.PatternLayout
log4j.appender.PKG1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n


log4j.logger.com.pkg1.pkg2=DEBUG, PKG2
log4j.appender.PKG2=org.apache.log4j.RollingFileAppender
log4j.appender.PKG2.File=logs/PKG2.log
log4j.appender.PKG2.MaxFileSize=1MB
log4j.appender.PKG2.MaxBackupIndex=1
log4j.appender.PKG2.layout=org.apache.log4j.PatternLayout
log4j.appender.PKG2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n


# Direct log messages to CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

通过禁用配置中的
additivity
标志,可以阻止
PKG2
的日志到达其祖先的附加程序:

 log4j.appender.PKG2.additivity=false

这个问题可能会有所帮助:我尝试过这个,但问题是它根本不记录PKG2。我需要另一个appender记录PKG2。它几乎成功了。但是我必须添加log4j.additivity.com.pkg1.pkg2=false,而不是log4j.appender.pkg2.additivity=false。谢谢