gpt4 book ai didi

java - SLF4J和Logback : Propagate logger to autowired services

转载 作者:行者123 更新时间:2023-12-01 09:39:47 24 4
gpt4 key购买 nike

我对日志记录有点陌生,我已经开始了一个项目,并选择了 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 个服务(BooBar),位于两个不同的包中。我已经为每个服务配置了一个附加程序,并且这些服务的日志记录工作正常。

这就是我面临的问题。

两个服务(BooBar)都具有第三个服务(Tee)的 Autowiring 依赖项,但没有为其定义附加程序。 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:我试图找到以前的答案,但我不知道我是否使用了错误的关键字进行搜索,或者是否无法完成。

最佳答案

所以您已经配置了三个记录器

  • com.foo.bar
  • com.foo.boo

如果您希望某些不在 bar/boo 包中的类使用 bar/boo 记录器,那么您不需要使用它自己的记录器。

class Tee {
private final Logger log = LoggerFactory.getLogger(Bar.class);

另请注意,记录器名称实际上不需要与任何包或类名称相对应。

如果您希望记录器依赖于调用者,则调用应包含记录器。

class Tee {
public void doSomething(Logger log) {

关于java - SLF4J和Logback : Propagate logger to autowired services,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38550126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com