考虑以下 logback 基本配置:
<configuration>
<appender name="ControlAppender" class="org.quackbot.ControlAppender">
<pattern>%d{MM/dd/yyy hh:mm:ss a} %-5p %c - </pattern>
</appender>
</configuration>
如何使用该布局并格式化该行?一些不同的博客文章和邮件列表说 AppenderBase 曾经有一个 getLayout() 和 setLayout() 方法,但它们已经被删除了。
在我的代码中重新实现布局的 getter 和 setter 不起作用,它只是返回 null。 event.getFormattedMessage()
返回原始行,而不是格式化的行。我似乎找不到任何其他方法可以根据布局格式化消息。
有没有办法根据配置中指定的模式来格式化消息?
最佳答案
Logback 配置只是将您指定的元素组合在一起。它本身并不构成组件。在上面的配置文件中,您没有指定布局元素,因此它不会被注入(inject)到您的 ControlAppender 中。
由于我不知道 ControlAppender 的作用,所以我无法建议最合适的解决方案。但是,您至少有两个选择:
1) 让 ControlAppender 接受布局作为参数。您的配置文件将类似于:
<configuration>
<appender name="ControlAppender" class="org.quackbot.ControlAppender">
<layout class="class="ch.qos.logback.classic.PatternLayout"">
<pattern>%d{MM/dd/yyy hh:mm:ss a} %-5p %c - </pattern>
</layout>
</appender>
</configuration>
Logback 会将 PatternLayout 实例注入(inject) ControlAppender 中。然后,您可以使用 PatternLayout 实例根据您选择的模式来格式化事件。
2) 如果您总是要使用 PatternLayout,您可以直接从模式创建它。您的配置文件将类似于:
<configuration>
<appender name="ControlAppender" class="org.quackbot.ControlAppender">
<pattern>%d{MM/dd/yyy hh:mm:ss a} %-5p %c - </pattern>
</appender>
</configuration>
您需要 ControlAppender 中的 setter 方法(即 setPattern)将模式注入(inject)到 ControlAppender 中。一旦有了模式,您就可以自己创建一个 PatternLayout。例如通过调用:
PatternLayout pl = new PatternLayout();
pl.setPattern(pattern);
pl.setContext(context);
pl.start();
如果您需要进一步帮助,请在 logback 用户列表上喊叫。
关于java - 从 Logback 中的 Appender 获取当前布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6458292/