【问题标题】:Grouping Appenders At Logback?在 Logback 中对 Appender 进行分组?
【发布时间】:2013-06-11 07:37:00
【问题描述】:

我有两个附加程序。其中之一是 DB appender,另一个是 SMTPAppender。当我用特殊标记记录一个字符串时,我想同时使用我的自定义 db appender 和 SMTPAppender。但是我不想像这样定义两个附加程序:

<logger name="com.MyClass" level="DEBUG" additivity="false">
    <appender-ref ref="CUSTOM_DB"/>
    <appender-ref ref="CUSTOM_EMAIL"/>
</logger>

我想要一个像这样的特殊参考:

<appender-group ref="CUSTOM_COMBO">
    <appender-ref ref="CUSTOM_DB"/>
    <appender-ref ref="CUSTOM_EMAIL"/>
</appender-group>

<logger name="com.MyClass" level="DEBUG" additivity="false">
    <appender-ref ref="CUSTOM_COMBO"/>
</logger>

它应该同时调用 CUSTOM_DB 和 CUSTOM_EMAIL。如何使用 slf4j 在 Logback 中做到这一点?

【问题讨论】:

  • 酷功能请求。我认为这在 logback 中不存在。您可以在根记录器中放置一堆附加程序,并将您的可加性标志设置为true
  • 您的用例中记录器和标记之间的关系是什么?
  • @Ceki 我想要一个以 CUSTOM 开头的标记。我将使用 CUSTOM.DB、CUSTOM.EMAIL 等标记进行日志记录。我想在我的附加程序中进行模式匹配,以检查任一给定标记是否以“CUSTOM”开头。或不。如果它以“CUSTOM”开头。并且 appender 是 CUSTOM_DB,如果它以“CUSTOM”开头,它将写入 DB。并且 appender 是 CUSTOM_EMAIL 它将发送一封电子邮件。这就是为什么我想要一个 appender 组。另一方面,如果我可以编写自定义 appender-group 并在其中进行模式匹配,例如 MARKER 以“CUSTOM”开头。否则这将是另一件很酷的事情。
  • 我还不清楚你想要什么。你能再澄清一下这个问题吗?
  • 我想把一个 ref 变成一组逻辑的 appender 而不是一个 appender。

标签: java logging slf4j logback appender


【解决方案1】:

看来您需要编写自己的 CompoundAppender,有关如何编写自定义 appender 的详细信息,请参见 http://logback.qos.ch/manual/appenders.html

【讨论】:

    【解决方案2】:

    所以来自https://tersesystems.com/blog/2019/05/27/application-logging-in-java-part-5/

    public class CompositeAppender<E> extends UnsynchronizedAppenderBase<E> implements AppenderAttachable<E> {
    
        protected AppenderAttachableImpl<E> aai = new AppenderAttachableImpl<E>();
    
        @Override
        protected void append(E eventObject) {
            aai.appendLoopOnAppenders(eventObject);
        }
    
        // AppenderAttachable API delegates to aai in all cases
    }
    

    <configuration>
    
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>[%-5level] %logger{15} -  message%n%xException{10}</pattern>
            </encoder>
        </appender>
    
        <appender name="FILE" class="ch.qos.logback.core.FileAppender">
            <file>file.log</file>
            <encoder>
                <pattern>%date - %message</pattern>
            </encoder>
        </appender>
    
        <appender name="CONSOLE_AND_FILE" class="com.tersesystems.logback.CompositeAppender">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="FILE"/>
        </appender>
    
        <root level="TRACE">
            <appender-ref ref="CONSOLE_AND_FILE"/>
        </root>
    </configuration>
    

    【讨论】:

      猜你喜欢
      • 2019-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多