java - 将来自特定包的消息记录到文件中

标签 java logging log4j

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

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

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

这可能吗?我知道我可以通过自定义 appender 来实现它,但是有没有一种方法可以通过配置来实现。

我正在使用以下属性文件。这里的问题是 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

关于java - 将来自特定包的消息记录到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20114302/

相关文章:

java - 我的 DataReader 类实例出现问题

python-2.7 - 嵌入Mayavi时在vtkOutputWindow中禁用或捕获VTK警告

android - 如何连续读取logcat并写入内部存储文件?

java - 破解 Log4j 以发送自定义 SysLog 消息

java - spring-boot-starter-amqp 依赖导致 StackOverflowError

java - 如何在 freebsd 上设置 java?

java - 如何找到与给定类共存的 jar

java - log4j 与 maven tomcat7 :run but not with tomcat7:deploy 一起工作

java - 更改 java 符号链接(symbolic link)

linux - 如何在 Linux 中停止命令日志( rsyslog )?