slf4j,logback - 引用未从任何记录器引用的appender

时间:2013-09-22 14:50:53

标签: slf4j logback

我想在logger.xml文件中定义SMTPAppender,但我不希望从任何记录器中引用它。

然后当我的应用程序加载时,我希望以编程方式将此appender添加到特定的记录器。

然而" getAppender"方法只能从Logger访问。

有没有办法解决这个问题,无需通过任何记录器即可获取appender?

2 个答案:

答案 0 :(得分:1)

我想,我不确定我是否理解你的问题,但我可以尝试一下:

    <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
        <marker>MAIL_LOGS</marker>

    </evaluator>

    <smtpHost>smtp.gmail.com</smtpHost>
    <smtpPort>465</smtpPort>
    <SSL>true</SSL>
    <username>${username}</username>
    <password>${password}</password>
    <to>${email1}</to>
    <from>${from}</from>
    <subject>URGENT: ERROR NOTIFICATION </subject>

    <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTrackerImpl">

        <bufferSize>20</bufferSize>
    </cyclicBufferTracker>

    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="ch.qos.logback.classic.html.HTMLLayout">
            <pattern>%date%thread%level%logger%msg</pattern>
        </layout>
    </encoder>
</appender>

并在记录器中添加标记,如

  

标记标记= MarkerFactory.getMarker(“MAIL_LOGS”);

     

LOG.error(标记,“发送此消息”);

此处标记为标记的所有日志都将被SMTPAppender记录。

答案 1 :(得分:1)

是!!!绝对可以做到这一点,但发送每个级别的事件可能会导致太多的电子邮件,使目标用户的邮箱变得混乱,这也会妨碍你的表现。

以下是您完成任务的步骤:

第1步:将janino jar添加到您的类路径中,您可以在这里下载http://janino.net/changelog.html

步骤2:在SMTPAppender中添加以下评估程序:

<evaluator  class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
  <expression>
     (marker == null) 
  </expression>
</evaluator>