[日志]logback告警
开发过程中,难免会有发生错误或异常的时候,有些是需要及时通知到相关开发人员的。logback可以通过简单的配置达到邮件告警的目的。
一、错误告警
如下配置,所有Error级别的log发送邮件告警给receiver(多个receiver以逗号分隔)
<?xml version="1.0" encoding="UTF-8"?>
<configuration> <springProperty scope="context" name="receiver" source="log.email.receiver" defaultValue="xxxxxx@qq.com"/>
<springProperty scope="context" name="env" source="spring.profiles.active" defaultValue="dev"/> <property name="smtpHost" value="localhost" />
<property name="smtpPort" value="25" />
<property name="username" value="username" />
<property name="password" value="password" />
<property name="from" value="send@126.com" /> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level][%thread]:%logger{50} [%method:%line] %msg%n</pattern>
</encoder>
</appender> <appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
<bufferSize>1</bufferSize>
</cyclicBufferTracker> <smtpHost>${smtpHost}</smtpHost>
<smtpPort>${smtpPort}</smtpPort>
<username>${username}</username>
<password>${password}</password>
<from>${from}</from>
<to>${receiver}</to>
<subject>【test-email Error】【${env}环境】: %logger{20} - %m </subject>
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}%level%thread%logger{35}%message</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender> <springProfile name="dev,test">
<root>
<level value="info"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="EMAIL"/>
</root>
</springProfile> <springProfile name="uat,pro">
<root>
<level value="info"/>
<appender-ref ref="EMAIL"/>
</root>
</springProfile>
</configuration>
Error级别日志:
log.error("an unexpected error!");
收到告警邮件:

记入ex,可以看到详细的堆栈信息。
a、springProperty 从spring读取配置
<springProperty scope="context" name="receiver" source="log.email.receiver" defaultValue="xxxxxx@qq.com"/>
scope:context 参考(官网)

name:定义的变量名
source:需要spring配置的节点名称。(eg:log.email.receiver=xxx@126.com,yyy@qq.com)
defaultValue:默认值
二、自定义告警
上面是对所有Error级别日志的告警,有时候需要对正常业务的邮件通知,此时可以用Mark来发邮件。
<?xml version="1.0" encoding="UTF-8"?>
<configuration> <springProperty scope="context" name="receiver" source="log.email.receiver" defaultValue="xxxxxx@qq.com"/>
<springProperty scope="context" name="env" source="spring.profiles.active" defaultValue="dev"/> <property name="smtpHost" value="localhost" />
<property name="smtpPort" value="25" />
<property name="username" value="username" />
<property name="password" value="password" />
<property name="from" value="send@126.com" /> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level][%thread]:%logger{50} [%method:%line] %msg%n</pattern>
</encoder>
</appender> <appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
<bufferSize>1</bufferSize>
</cyclicBufferTracker> <smtpHost>${smtpHost}</smtpHost>
<smtpPort>${smtpPort}</smtpPort>
<username>${username}</username>
<password>${password}</password>
<from>${from}</from>
<to>${receiver}</to>
<subject>【开发人员关注】【${env}环境】</subject>
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}%level%thread%logger{35}%message</pattern>
</layout>
<!-- 基于标记的发送邮件 这里我们加入一个标记DEVELOP,发送日志时只需加入此标记即可,如有多个标记加入多个<maker></maker>标签即可 -->
<evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
<marker>DEVELOP</marker>
</evaluator>
</appender> <springProfile name="dev,test">
<root>
<level value="info"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="EMAIL"/>
</root>
</springProfile> <springProfile name="uat,pro">
<root>
<level value="info"/>
<appender-ref ref="EMAIL"/>
</root>
</springProfile>
</configuration>
Mark邮件示例:
log.info(MarkerFactory.getMarker("DEVELOP"), "notify developers!");
邮件:

三、自定义邮件格式
邮件自定义格式。实现自定义的 HTMLLayout:
public class MyHtmlLayout extends HTMLLayout {
IThrowableRenderer<ILoggingEvent> throwableRenderer;
private String tag;
public MyHtmlLayout() {
super();
this.throwableRenderer = new DefaultThrowableRenderer();
}
@Override
public String doLayout(ILoggingEvent event) {
StringBuilder buf = new StringBuilder();
this.startNewTableIfLimitReached(buf);
boolean odd = true;
if((this.counter++ & 1L) == 0L) {
odd = false;
}
String level = event.getLevel().toString().toLowerCase();
buf.append(CoreConstants.LINE_SEPARATOR);
buf.append("<tr class=\"");
buf.append(level);
if(odd) {
buf.append(" odd\">");
} else {
buf.append(" even\">");
}
buf.append(CoreConstants.LINE_SEPARATOR);
for(Converter c = this.head; c != null; c = c.getNext()) {
this.appendEventToBuffer(buf, c, event);
}
buf.append("</tr>");
buf.append(CoreConstants.LINE_SEPARATOR);
if(event.getThrowableProxy() != null) {
throwableRenderer.render(buf, event);
}
return buf.toString();
}
private void appendEventToBuffer(StringBuilder buf, Converter<ILoggingEvent> c, ILoggingEvent event) {
buf.append("<td class=\"");
buf.append(this.computeConverterName(c));
buf.append("\">");
buf.append(Transform.escapeTags(c.convert(event)) + ",my tag:" + tag);
buf.append("</td>");
buf.append(CoreConstants.LINE_SEPARATOR);
}
public String getTag() {
return tag;
}
public void setTag(String tag) {
this.tag = tag;
}
}
将logback-spring.xml配置改为(配置的tag):
<layout class="com.logback.demo.eval.MyHtmlLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}%level%thread%logger{35}%message</pattern>
<tag>this is my layout tag</tag>
</layout>

四、记日志报错
参考:
[日志]logback告警的更多相关文章
- 24 Zabbix系统配置日志监控告警--关键字触发
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 24 Zabbix系统配置日志监控告警--关键字触发 trapper是被监控主机主动发送数据给za ...
- Spring Boot系列一:默认日志logback配置解析
前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如何使用? 正文 Sp ...
- 【spring boot logback】日志logback格式解析
日志logback格式解析 logback官网 格式解析 https://logback.qos.ch/manual/layouts.html#ClassicPatternLayout 官网格式解析有 ...
- Spring Boot默认日志logback配置解析
前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如何使用? 正文 Sp ...
- (转)Spring Boot干货系列:(七)默认日志logback配置解析
转:http://tengj.top/2017/04/05/springboot7/ 前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的, ...
- springboot学习4使用日志:logback
springboot学习4使用日志:logback 一.基本知识说明 SpringBoot默认使用logback作为日志框架 ,所以引入起步依赖后就可以直接使用logback,不需要其他依赖. Spr ...
- 第1节 storm日志告警:1、 - 5、日志监控告警业务需求、代码、集群运行、总结
如何解决短信或者邮件频繁发送的问题:每次发送的时候都先查询数据库记录,看一下有没有给这个人发送消息,上一次发送消息的时间是什么时候,如果发送时间间隔小于半个小时,就不要再发了 ============ ...
- MS SQL 监控错误日志的告警信息
SQL Server的错误消息(Error Message)按照消息的严重级别一共划分25个等级,级别越高,表示严重性也越高.但是如果你统计sys.messages,你会发现,实际上只有16(SQL ...
- SpringBoot配置日志logback
1.这里我们选择logback,首先加入pom依赖 <dependency> <groupId>ch.qos.logback</groupId> <artif ...
随机推荐
- php 实现Iterator 接口
<?php class MyIterator implements Iterator{ private $var = array(); public function __construct($ ...
- 如何在Myeclipse中启动多个Tomcat
比如:有两个版本的tomcat,一个5.*,一个6.*,此时由于两个工程分别部署在两个版本的tomcat下,需要同时启动两个tomcat,以下是方法: 1.特别要注意: 不要设置CATALINA_HO ...
- 微软笔试题-highways
题目大意 一条单向的高速公路上有N辆车,在0时刻,每辆车分别在起点A[0],A[1]....处开始从北向南出发,每辆车有个终点B[0],B[1]....且每辆车有个限制速度 V[0],V[1]... ...
- c++与js脚本交互,C++调用JS函数/JS调用C++函数
<!DOCTYPE html> <html> <body> <h1>我的第一段 JavaScript</h1> <p> Java ...
- 通过AnimationSet 同步或一部播放多个动画 Android 属性动画(Property Animation) 完全解析 (下)
AnimationSet提供了一个把多个动画组合成一个组合的机制,并可设置组中动画的时序关系,如同时播放,顺序播放等. 以下例子同时应用5个动画: 播放anim1: 同时播放anim2,anim3,a ...
- Zipline Beginner Tutorial
Zipline Beginner Tutorial Basics Zipline is an open-source algorithmic trading simulator written in ...
- 如何缩减手游app安装包的大小?
包体过大对手游的影响更是诟病已久,有具体数据证明,游戏包体越大,在游戏运营推广过程中游戏用户的转化率就越低:反之,游戏包体越小,游戏用户的下载转化率就越高(如下图),所有的手机app.游戏在大版本更新 ...
- go学习笔记二:运行使用命令行参数
本文只作为博主的go语言学习笔记. 对命令行参数的解析,只是在运行时使用的,比如以下命令:go run gomain -conf conf.toml 没有办法再go build时使用. 一.运行时命令 ...
- LINux网络的NAPI机制详解一
在查看NAPI机制的时候发现一篇介绍NAPI引入初衷的文章写的很好,通俗易懂,就想要分享下,重要的是博主还做了可以在他基础上任意修改,而并不用注明出处的声明,着实令我敬佩,不过还是附上原文链接! ht ...
- 爬虫之UserAgent
UserAgent简介 UserAgent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,UserAgent也简称UA.它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及 ...