我想在logger.xml文件中定义SMTPAppender,但我不希望从任何记录器中引用它。
然后当我的应用程序加载时,我希望以编程方式将此appender添加到特定的记录器。
然而" getAppender"方法只能从Logger访问。
有没有办法解决这个问题,无需通过任何记录器即可获取appender?
答案 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>