从Logback中的Appender获取当前布局?

时间:2011-06-23 17:38:24

标签: java logback

考虑以下基于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()返回原始行,而不是格式化行。我似乎无法找到任何其他方法来根据布局格式化消息。

有没有办法根据配置中指定的模式格式化消息?

1 个答案:

答案 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();

如果您需要进一步的帮助,请在回退用户列表上留言。