开发过程中,难免会有发生错误或异常的时候,有些是需要及时通知到相关开发人员的。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告警的更多相关文章

  1. 24 Zabbix系统配置日志监控告警--关键字触发

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 24 Zabbix系统配置日志监控告警--关键字触发 trapper是被监控主机主动发送数据给za ...

  2. Spring Boot系列一:默认日志logback配置解析

    前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如何使用? 正文 Sp ...

  3. 【spring boot logback】日志logback格式解析

    日志logback格式解析 logback官网 格式解析 https://logback.qos.ch/manual/layouts.html#ClassicPatternLayout 官网格式解析有 ...

  4. Spring Boot默认日志logback配置解析

    前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如何使用? 正文 Sp ...

  5. (转)Spring Boot干货系列:(七)默认日志logback配置解析

    转:http://tengj.top/2017/04/05/springboot7/ 前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的, ...

  6. springboot学习4使用日志:logback

    springboot学习4使用日志:logback 一.基本知识说明 SpringBoot默认使用logback作为日志框架 ,所以引入起步依赖后就可以直接使用logback,不需要其他依赖. Spr ...

  7. 第1节 storm日志告警:1、 - 5、日志监控告警业务需求、代码、集群运行、总结

    如何解决短信或者邮件频繁发送的问题:每次发送的时候都先查询数据库记录,看一下有没有给这个人发送消息,上一次发送消息的时间是什么时候,如果发送时间间隔小于半个小时,就不要再发了 ============ ...

  8. MS SQL 监控错误日志的告警信息

    SQL Server的错误消息(Error Message)按照消息的严重级别一共划分25个等级,级别越高,表示严重性也越高.但是如果你统计sys.messages,你会发现,实际上只有16(SQL ...

  9. SpringBoot配置日志logback

    1.这里我们选择logback,首先加入pom依赖 <dependency> <groupId>ch.qos.logback</groupId> <artif ...

随机推荐

  1. Java知识点梳理——集合

    1.定义:Java集合类存放于java.util包,是存放对象的容器,长度可变,只能存放对象,可以存放不同的数据类型: 2.常用集合接口: a.Collection接口:最基本的集合接口,存储不唯一, ...

  2. matlab 中关于 varargin 参数

    varargin 提供了一种函数可变参数列表机制,允许调用者调用该函数时根据需要来改变输入参数的个数: varargin{1}代表可变参数列表的第一个实参,同理varargin{2}代表可变参数列表的 ...

  3. JZOJ.5305【NOIP2017模拟8.18】C

    Description

  4. 【BZOJ4808/3175】马/[Tjoi2013]攻击装置 最小割

    [BZOJ4808]马 Description 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗称"蹩马腿" ...

  5. JDBC通用DAO

    dbcBaseDao接口,内容如下: package com.sun4j.core.jdbc.dao; import java.io.Serializable; import java.util.Li ...

  6. MyBatis笔记——EhCache二级缓存

    介绍 ehcache是一个分布式缓存框架. 我们系统为了提高系统并发,性能.一般对系统进行分布式部署(集群部署方式)  不使用分布缓存,缓存的数据在各各服务单独存储,不方便系统开发.所以要使用分布式缓 ...

  7. angular4 form 表单中 input输入框的disabled属性

    直接加[disabled]="isDisabled"属性的话,出现报错 根据提示,做如下修改 private isEdit: boolean = true; private isD ...

  8. Struts2的简单的文件上传

    1文件上传的流程: 第一步:首先得用表单标签的<s:file>在客户端接收上传的文件例如: <%@ page language="java" import=&qu ...

  9. vsftp or pureftpd

    一.安装pureftpd //这个软件比vsftp配置起来更加灵活和安全. /*官网是 http://www.pureftpd.org/project/pure-ftpd*/ [root@localh ...

  10. RabbitMq入门与基本使用

    这两天工作项目中用到了rabbitmq,顺便学习了一下. RabbitMq主要的使用模式有三种:工作队列,发布订阅和RPC远程调用. 1.工作队列 生产者: using System; using R ...