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

Java 从Logback中的Appender获取当前布局?,java,logback,Java,Logback,考虑以下用于回显的基本配置: <configuration> <appender name="ControlAppender" class="org.quackbot.ControlAppender"> <pattern>%d{MM/dd/yyy hh:mm:ss a} %-5p %c - </pattern> </appender> </configuration> %d{MM/dd/

考虑以下用于回显的基本配置:

<configuration>
    <appender name="ControlAppender" class="org.quackbot.ControlAppender">
        <pattern>%d{MM/dd/yyy hh:mm:ss a}  %-5p %c - </pattern>
    </appender>
</configuration>

%d{MM/dd/yyy hh:MM:ss a}%-5p%c-
如何使用该布局并设置行的格式?一些不同的博客帖子和邮件列表说AppenderBase曾经有一个getLayout()和setLayout()方法,但它们已经被删除了

在我的代码中重新实现布局的getter和setter不起作用,它只返回null
event.getFormattedMessage()
返回原始行,而不是格式化行。我似乎找不到任何其他方法可以根据布局格式化消息


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

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>
<configuration>
    <appender name="ControlAppender" class="org.quackbot.ControlAppender">
      <pattern>%d{MM/dd/yyy hh:mm:ss a}  %-5p %c - </pattern>
    </appender>
</configuration>
如果需要进一步帮助,请在logback用户列表中大声呼叫

 PatternLayout pl = new PatternLayout();
 pl.setPattern(pattern);
 pl.setContext(context);
 pl.start();