我想在 logger.xml 文件中定义 SMTPAppender,但我不想从任何记录器中引用它。
然后,当我的应用程序加载时,我希望以编程方式将此附加程序添加到特定的记录器。
但是“getAppender”方法只能从 Logger 访问。
有没有办法解决这个问题并在不通过任何记录器的情况下获取附加程序?
是的!!!绝对可以这样做,但是发送每个级别的事件可能会导致电子邮件过多,使目标用户的邮箱混乱,并且还会影响您的表现。
以下是您可以完成任务的步骤:
第 1 步:将 janino jar 添加到您的类路径中,您可以在此处下载http://janino.net/changelog.html
第 2 步:在您的 SMTPAppender 中添加以下评估程序:
<evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
<expression>
(marker == null)
</expression>
</evaluator>
我想,我不确定我是否理解你的问题,但我可以试一试:
<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(marker, "发送此消息");
这里所有标记为标记的日志都将由 SMTPAppender 记录。