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

标签 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() 返回原始行,而不是格式化的行。我似乎找不到任何其他方法可以根据布局格式化消息。

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

最佳答案

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/

相关文章:

java - 带有通用标签的 Listview setCellFactory

java - 使用 ActiveMQ 调度程序的性能下降问题

java - 从 HTTP Post 接收 XML

java - Eclipse TDD - 如何加入测试和主源文件夹?

json - 如何将 slf4j-over-logback 日志写为 JSON

azure - 相同服务的 Kubernetes 多个 POD 实例的日志配置

java - 如何通过在名称中添加 int 来从 strings.xml 获取字符串

tomcat - 通过 logback/sl4j 进行嵌入式 Tomcat 日志记录

java - Logback 的自定义上下文选择器有什么意义?