java - Log4j 定义多个记录器

标签 java tomcat log4j

我正在用 Java 编写一个 REST 服务(在 Tomcat 9 上使用 JAX-RS 标准)并且我想在我的程序中添加日志以便在调用时跟踪他的工作。

所以我使用 Log4j(版本 1.2.17)来编写我的日志,我想为我的 REST 服务上运行的每个服务编写一个不同的日志文件,但我只需要使用一个 log4j 属性整个应用程序

所以我想在我的日志文件夹中放置这种日志

--------------------------------
| Method | Log File            |
|------------------------------|
| /A     | MyRestService_A.log |
| /B     | MyRestService_B.log | 
--------------------------------

所以我把它写成 Log4j 的配置(restServiceLogger.properties):

log4j.rootLogger=A,B

#/A
log4j.appender.A=org.apache.log4j.RollingFileAppender
log4j.appender.A.File=logs/MyRestService_A.log
log4j.appender.A.MaxFileSize=5MB
log4j.appender.A.MaxBackupIndex=5
log4j.appender.A.layout=org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n

#/B
log4j.appender.B=org.apache.log4j.RollingFileAppender
log4j.appender.B.File=logs/MyRestService_B.log
log4j.appender.B.MaxFileSize=5MB
log4j.appender.B.MaxBackupIndex=5
log4j.appender.B.layout=org.apache.log4j.PatternLayout
log4j.appender.B.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n

然后在 /A 方法中我用这个初始化记录器:

PropertyConfigurator.configure("conf/restServiceLogger.properties");
Logger log = Logger.getLogger("A");

然后在 /B 方法中我用这个初始化记录器:

PropertyConfigurator.configure("conf/restServiceLogger.properties");
Logger log = Logger.getLogger("B");

问题是,当我写日志时,它们都写在/A 日志文件 (MyRestService_A.log) 中。

如何通过对整个项目仅使用一个属性来解决此问题?

谢谢

最佳答案

您需要在您的配置文件中定义记录器,并使用相同的记录器在您的类文件中获取 Logger 实例

例如

log4j.logger.A=,A    
log4j.additivity.A=false

和你的类文件,按名称获取记录器

例如在A类

Logger logger = Logger.getLogger("A");`

您的 log4j.properties 文件应该如下所示。

log4j.rootLogger=A,B

#/A
log4j.logger.A=,A
log4j.additivity.A=false
log4j.appender.A=org.apache.log4j.RollingFileAppender
log4j.appender.A.File=logs/MyRestService_A.log
log4j.appender.A.MaxFileSize=5MB
log4j.appender.A.MaxBackupIndex=5
log4j.appender.A.layout=org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n

#/B
log4j.logger.B=,B
log4j.additivity.B=false
log4j.appender.B=org.apache.log4j.RollingFileAppender
log4j.appender.B.File=logs/MyRestService_B.log
log4j.appender.B.MaxFileSize=5MB
log4j.appender.B.MaxBackupIndex=5
log4j.appender.B.layout=org.apache.log4j.PatternLayout
log4j.appender.B.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n

关于java - Log4j 定义多个记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53673727/

相关文章:

java - 哪个是 Java 中计量经济学的最佳软件包?

使用 UDP 进行复制的 Tomcat 集群

jakarta-ee - 在 apache chainaw 中打开现有日志文件

java - Log4j 引用输入

java - xml如何定义数据?

java - Service在Thread.sleep后接收命令

spring - 如何在 Spring Boot 中使用 Tomcat RemoteIpFilter

java - 使用 log4j 在一行中获取多个日志

Java 除以零不会抛出 ArithmeticException - 为什么?

spring - 没有定义名为 'cxf' 的 bean