【发布时间】:2016-07-24 08:29:31
【问题描述】:
我是 Logging 的新手,我已经开始了一个我选择 Logback 的项目。
我有以下logback.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="BARLOGGER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME:-/repository/logs}/bar.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME:-/repository/logs}/bar.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="BOOLOGGER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME:-/repository/logs}/boo.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME:-/repository/logs}/boo.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.foo.bar" level="debug" additivity="false">
<appender-ref ref="BARLOGGER" />
</logger>
<logger name="com.foo.boo" level="debug" additivity="false">
<appender-ref ref="BOOLOGGER" />
</logger>
<root level="error">
<appender-ref ref="STDOUT" />
</root>
</configuration>
我有 2 个服务(Boo 和 Bar),在两个不同的包中。我为它们中的每一个都配置了一个附加程序,并且这些服务的日志记录工作正常。
这是我面临的问题。
这两个服务(Boo 和 Bar)都具有第三个服务(Tee)的自动关联依赖关系,没有为其定义附加程序。 Tee 服务位于 com.foo.tee
我不想为这 3 个服务创建唯一的日志,因为它们做不同的事情并在不同的时间运行。
有没有办法将 Tee 服务记录到 Boo 或 Bar 附加程序,具体取决于哪个服务(Boo / Bar)调用了这个服务?
基本上我想要达到的是
- Bar 具有 Tee 依赖项。如果 Bar 调用 Tee 方法,则该方法的日志记录应仅写入 Bar 记录器
- Boo 还具有 Tee 依赖项。如果 Boo 调用 Tee 方法,则该方法的日志记录应仅写入 Boo 记录器
- Bar 和 Boo 日志写入不同的文件,Tee 日志记录只能附加到其“调用者”日志中
我希望它具有正在执行的操作的上下文,因为 Tee 的第三个日志文件很难跟踪调用的来源。
谢谢!
PS:我试图找到以前的答案,但我不知道我是否使用错误的关键字搜索或者无法完成。
【问题讨论】:
-
不太确定发生了什么,但是如果你将 lombok 安装到你的项目中,你所要做的就是用 @Slf4j 注释类。调查一下,祝你好运。
-
@Sarief 有点矫枉过正,因为它只替换了一行
private final Logger log = LoggerFactory.getLogger(getClass()) -
@OrangeDog 也许,但对我来说就像:安装和使用。也不需要这条线,因为我认为它是矫枉过正的:D
-
服务“Tee”具有正确的私有最终 Logger log = LoggerFactory.getLogger(Tee.class),但由于某种原因,来自 Tee 的日志记录未包含在 Bar 或 Boo 日志中。这就是我想要完成的事情
标签: java spring logback slf4j autowired