考虑以下基于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()
返回原始行,而不是格式化行。我似乎无法找到任何其他方法来根据布局格式化消息。
有没有办法根据配置中指定的模式格式化消息?
答案 0 :(得分:1)
Logback配置只是将您指定的元素组合在一起。它本身不构成组件。在上面的配置文件中,您尚未指定布局元素,因此不会将其注入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实例注入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)将模式注入ControlAppender。拥有模式后,您可以自己创建PatternLayout。例如,通过调用:
PatternLayout pl = new PatternLayout();
pl.setPattern(pattern);
pl.setContext(context);
pl.start();
如果您需要进一步的帮助,请在回退用户列表上留言。