我对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
)。我为每个服务器配置了一个appender,这些服务的日志记录工作正常。
这是我面临的问题。
两个服务(Boo
和Bar
)都具有第三个服务(Tee
)的自动连接依赖关系,其中没有定义任何appender。 Tee
服务位于com.foo.tee
我不希望3个服务有一个唯一的日志,因为它们做不同的事情并在不同的时间运行。
是否有办法将Tee
服务日志记录包含在Boo或Bar appender中,具体取决于哪个服务(Boo
/ Bar
)称为此服务?
基本上,我想要实现的是
我希望这具有正在执行的操作的上下文,因为拥有Tee的第三个日志文件使得难以跟踪调用的来源。
谢谢!
PS:我试图找到之前的答案,但我不知道我是否在搜索错误的关键字,或者是否无法完成。
答案 0 :(得分:1)
所以你配置了三个记录器
如果您想要某个不在bar / boo包中的课程使用bar / boo记录器,那么您将不需要使用自己的记录器。
class Tee {
private final Logger log = LoggerFactory.getLogger(Bar.class);
另请注意,记录器名称实际上并不需要实际对应任何包或类名。
如果您希望记录器依赖于呼叫者,则呼叫应包括记录器。
class Tee {
public void doSomething(Logger log) {