标签:完成 解决 多个 thread read images world org erro
使用logback发送邮件
需求:
1、报错发邮件,定位错误位置以尽快解决;(报错发送邮件)
2、某一项重要操作完成之后发送邮件;(自定义发送邮件)
没有接触过logback,怎么办?
没办法,硬着头皮上吧。先搞需求1网上查了一波,按照说的一步一步走下来,竟然可以发送了 (意料之中)
首先加入logback需要的jar 这里使用maven
<!-- logback核心包 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.3</version> </dependency> <!-- 发送邮件需要的2个jar --> <dependency> <groupId>org.codehaus.janino</groupId> <artifactId>janino</artifactId> <version>2.7.8</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency>
网上找个logback.xml,加入以下内容,参数对应填入
需求1:
<!-- 邮件 --> <!-- SMTP server的地址,必需指定。如网易的SMTP服务器地址是: smtp.163.com --> <property name="smtpHost" value="127.0.0.1"/><!--填入要发送邮件的smtp服务器地址(问DBA或者经理啥的就知道)--> <!-- 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"/><!--收件人账号多个可以逗号隔开--> <!-- 指定发件人名称。如果设置成“<ADMIN> ”,则邮件发件人将会是“<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 && 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"),"邮件内容");
最后贴上我的公司邮箱测试的截图
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MarkerFactory;
logback 发送邮件和自定义发送邮件;java类发送邮件
标签:完成 解决 多个 thread read images world org erro
原文地址:http://www.cnblogs.com/zhouyantong/p/7682941.html