logback配置错误日志发送邮件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014209975/article/details/78599961

这个问题整整弄了2天才真正实现了,网上各种搜索,各种坑,今天特地闲下来,记下笔记,希望可以帮助到需要的人。

需求:

1、报错发邮件,定位错误位置以尽快解决;(报错发送邮件)

2、某一项重要操作完成之后发送邮件;(自定义发送邮件)

没有接触过logback,怎么办?

没办法,硬着头皮上吧。先搞需求1网上查了一波,按照说的一步一步走下来,竟然可以发送了 (意料之中)

首先加入logback需要的jar 这里使用maven

<!-- logback start -->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-core</artifactId>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
</dependency>
<!-- logback end -->
<!-- mail start -->
<dependency>
  <groupId>javax.mail</groupId>
  <artifactId>mail</artifactId>
  <version>1.4.7</version>
</dependency>
<dependency>
  <groupId>org.codehaus.janino</groupId>
  <artifactId>janino</artifactId>
  <version>2.7.8</version>
</dependency>

网上找个logback.xml,加入以下内容,参数对应填入

 <!--  邮件 -->
    <!-- SMTP server的地址,必需指定。如网易的SMTP服务器地址是: smtp.163.com -->
    <property name="smtpHost" value="127.0.0.1"/><!--填入要发送邮件的smtp服务器地址-->
    <!-- SMTP server的端口地址。默认值:25 -->
    <property name="smtpPort" value="25"/>
    <!-- 发送邮件账号,默认为null -->
    <property name="username" value="zhouyantong@tjtftech.com"/><!--发件人账号-->
    <!-- 发送邮件密码,默认为null -->
    <property name="password" value="xxx"/><!--发件人密码-->
    <!-- 如果设置为true,appender将会使用SSL连接到日志服务器。默认值:false -->
    <property name="SSL" value="false"/>
    <!-- 指定发送到那个邮箱,可设置多个<to>属性,指定多个目的邮箱 -->
    <property name="email_to" value="1185611832@qq.com,1185611832@qq.com"/><!--收件人账号多个可以逗号隔开-->
    <!-- 指定发件人名称。如果设置成“&lt;ADMIN&gt; ”,则邮件发件人将会是“<ADMIN> ” -->
    <property name="email_from" value="logmonitor" />
    <!-- 指定emial的标题,它需要满足PatternLayout中的格式要求。如果设置成“Log: %logger - %msg ”,就案例来讲,则发送邮件时,标题为“【Error】: com.foo.Bar - Hello World ”。 默认值:"%logger{20} - %m". -->
    <property name="email_subject" value="【Error】: %logger" />
    <!-- ERROR邮件发送 -->
    <appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
        <smtpHost>${smtpHost}</smtpHost>
        <smtpPort>${smtpPort}</smtpPort>
        <username>${username}</username>
        <password>${password}</password>
        <asynchronousSending>true</asynchronousSending>
        <SSL>${SSL}</SSL>
        <to>${email_to}</to>
        <from>${email_from}</from>
        <subject>${email_subject}</subject>
     <!-- html格式-->
        <layout class="ch.qos.logback.classic.html.HTMLLayout">
            <Pattern>%date%level%thread%logger{0}%line%message</Pattern>
        </layout>
     <!-- 这里采用等级过滤器 指定等级相符才发送 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
            <!-- 每个电子邮件只发送一个日志条目 -->
            <bufferSize>1</bufferSize>
        </cyclicBufferTracker>
    </appender>
    <root level="info">
        <appender-ref ref="EMAIL"/>
    </root>

这种配置执行下面代码将会发送邮件!

logger.error("邮件内容");

如果需要直接报错发送邮件的,只需更改如下代码即可

复制代码
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">    
    <evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">  
        <expression>  
            <!-- 这里可以用java里的表达式 -->  
            if(level >= WARN &amp;&amp; null != throwable) {  
                return true;  
            }  
            return false;  
        </expression>    
    </evaluator>    
    <onMatch>ACCEPT</onMatch>    
    <onMismatch>DENY</onMismatch>      
</filter> 
而我个人更倾向于logger.error("邮件内容"); 原因很简单,规范的代码都有异常处理机制,处理时加入相应的参数发送报错信息,清晰明了!

需求2:

复制代码
<appender name="EMAILTO" class="ch.qos.logback.classic.net.SMTPAppender">
        <smtpHost>${smtpHost}</smtpHost>
        <smtpPort>${smtpPort}</smtpPort>
        <username>${username}</username>
        <password>${password}</password>
        <asynchronousSending>true</asynchronousSending>
        <SSL>${SSL}</SSL>
        <to>${email_to}</to>
        <from>${email_from}</from>
        <subject>${email_subject}</subject>
        <layout class="ch.qos.logback.classic.html.HTMLLayout">
            <Pattern>%date%level%thread%logger{0}%line%message</Pattern>
        </layout>
        <!-- 基于标记的发送邮件 这里我们加入一个标记DONE,发送日志时只需加入此标记即可,如有多个标记加入多个<maker></maker>标签即可 -->
        <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
            <marker>DONE</marker>
        </evaluator>
        <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
            <!-- 每个电子邮件只发一个日志条目 -->
            <bufferSize>1</bufferSize>
        </cyclicBufferTracker>
    </appender>
<root level="info">
        <appender-ref ref="EMAILTO"/>
</root>
复制代码

 

基于标记的发送邮件任何级别都可以发送,也可以定制级别,这里没有加入级别就不做演示了

基于标记的自定义发送邮件,加入一下代码即可:

 logger.info(MarkerFactory.getMarker("DONE"),"邮件内容");

红色内容和上面<maker>标签内的一致即可

效果如下:


到目前为止 ,logback发送邮件结束,我也希望这篇对大家工作上有一点点帮助的话 请点击下面的点赞,谢谢啦!大笑大笑大笑




没有更多推荐了,返回首页