簡體   English   中英

從Logback中的Appender獲取當前布局?

[英]Get the current layout from an Appender in 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配置僅將您指定的元素拼湊在一起。 它不能單獨組成組件。 在上面的配置文件中,您沒有指定布局元素,因此不會將其注入到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>

登錄將把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();

如果需要進一步的幫助,請在登錄用戶列表上大喊大叫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM