自定义Logback Appender未激活



Java 11和logback-classic-1.211。我正在尝试编写我自己的自定义appender,并遵循这篇Baeldung文章来测试它。

我的src/main/java/myapp/logging/CatAppender附加程序(在运行时类路径上(:

public class CatAppender extends AppenderBase<ILoggingEvent> {
@Override
protected void append(ILoggingEvent eventObject) {
System.out.println("meow");
}
}

我的src/main/resources/logback.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<appender name="cat" class="myapp.logging.CatAppender"/>
<root level="info">
<appender-ref ref="cat" />
</root>
</configuration>

在我的build.gradle中,我指定使用logback和Lombok:

plugins {
id "io.freefair.lombok" version '6.4.0'
}
dependencies {
implementation (
'ch.qos.logback:logback-classic:1.2.11'
,'org.projectlombok:lombok:1.18.16'
)
}

然后在我的Java代码中,我使用Lombok注入一个SLF4J记录器,如下所示:

@Slf4j
public class SomethingDoer {
public void doSomething() {
log.info("this should invoke the CatAppender...");
}
}

但是当SomethingDoer#doSomething()运行时,我看不到打印到STDOUT控制台的meow。我这里接线有错吗?

Baeldung文章中的一个主要遗漏是,您需要调用自定义appender的start()方法,否则AppenderBase子类将不会记录日志消息。

在我的情况下,我只是从CatAppender构造函数内部调用start(),一切都正常:

public class CatAppender extends AppenderBase<ILoggingEvent> {
public CatAppender() {
super();
start();
}
@Override
protected void append(ILoggingEvent eventObject) {
System.out.println("meow");
}
}

FWIWstart()被认为是初始化或构造函数级别的检查。您应该确保appender子类中的所有内容都是";健康的";足以开始日志记录,然后调用start()

所以在我的CCD_ 11的情况下;"猫叫";到STDOUT,我可以从构造函数内部完成。其他更复杂的子类必须弄清楚何时何地通过start()激活appender是合适的。

相关内容

  • 没有找到相关文章

最新更新