# alarm-log
**Repository Path**: faatang/alarm-log
## Basic Information
- **Project Name**: alarm-log
- **Description**: 日志监控报警,支持log4j、log4j2、logback等主流框架,支持SpringBoot、SpringMVC等框架,支持发送到钉钉、企业微信、邮箱等。
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 11
- **Created**: 2021-08-13
- **Last Updated**: 2021-08-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 1. 日志监控报警
**核心功能**:
- 监控日志中抛出的指定异常或者方法与类中抛出的指定异常,发送到钉钉、企业微信、邮箱等。
- 支持log4j、log4j2、logback等主流框架。
- 支持SpringBoot、SpringMVC等框架。
## 2. SpringBoot
详情查看`alarm-log-examples-spring-boot`包下代码
### 2.1 集成
#### 引入如下依赖
```xml
com.future94
alarm-log-spring-boot-starter
${latest.version}
```
### 2.2 引入日志监控
#### 2.2.1 同步方式
- **log4j** : 配置项说明见[2.3.3 日志配置中设置](#233-日志配置中设置)
```xml
```
- **log4j2** : 配置项说明见[2.3.3 日志配置中设置](#233-日志配置中设置)
```xml
false
java.lang.Exception,java.lang.RuntimeException
```
- **logback** : 配置项说明见[2.3.3 日志配置中设置](#233-日志配置中设置)
```xml
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
false
java.lang.Exception,java.lang.RuntimeException
true
```
#### 2.2.2 异步方式
- **log4j** : 配置项说明见[2.3.3 日志配置中设置](#233-日志配置中设置)
```xml
```
- **log4j2** : 配置项说明见[2.3.3 日志配置中设置](#233-日志配置中设置)
```xml
false
java.lang.Exception,java.lang.RuntimeException
```
- **logback** : 配置项说明见[2.3.3 日志配置中设置](#233-日志配置中设置)
```xml
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
false
java.lang.Exception,java.lang.RuntimeException
0
0
```
### 2.3 提供多种方式获取指定的日志异常信息
#### 2.3.1 系统全局配置
- spring.alarm-log.do-warn-exception : 获取日志中指定的异常类全路径信息,类型为List.
- spring.alarm-log.warn-exception-extend : 获取日志中指定异常信息是否启动继承判断。如:do-warn-exception为java.lang.Throwable,warn-exception-extend为true,则所有java.lang.Throwable的子类(java.lang.Exception、java.lang.RuntimeException、java.io.IOException等)都会触发警告事件。
```yaml
spring:
alarm-log:
warn-exception-extend: false
do-warn-exception:
- java.lang.Throwable
- java.lang.Exception
```
#### 2.3.2 继承、实现指定类
- com.future94.alarm.log.common.exception.**AlarmLogException** : 此类继承java.lang.Exception类,继承AlarmLogException类,即当日志事件中抛出此时触发警告事件。
- com.future94.alarm.log.common.exception.**AlarmLogRuntimeException** : 此类继承java.lang.RuntimeException类,继承AlarmLogException类,即当日志事件中抛出此时触发警告事件。
- com.future94.alarm.log.common.exception.**AlarmLogDoWarnException** : 实现AlarmLogDoWarnException接口,即当日志事件中抛出此时触发警告事件。注意:目前此接口还需要是java.lang.Throwable子类,以后会修改此限制。由于java是单继承,目前项目中不方便继承AlarmLog异常时,可以使用实现此接口的方式。
#### 2.3.3 日志配置中设置
- **log4j** : doWarnException、warnExceptionExtend配置意义与上面一致。
```xml
```
- **log4j2** : doWarnException、warnExceptionExtend配置意义与上面一致。注意:标签必须为AlarmLog,name属性可以随意。
```xml
false
java.lang.Exception,java.lang.RuntimeException
```
- **logback** : doWarnException、warnExceptionExtend配置意义与上面一致。
```xml
false
java.lang.Exception,java.lang.RuntimeException
```
#### 2.3.4 使用@Alarm注解
- doWarnException、warnExceptionExtend配置意义与上面一致。
- 注解加载类上时,注解设置作用域为当前类,只对当前类生效。
- 注解加载方法上时,注解设置作用域为当前方法,只对当前方法生效。
```java
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Alarm {
Class extends Throwable>[] doWarnException() default {Throwable.class};
boolean warnExceptionExtend() default false;
}
```
**示例** :
- test1只有在抛出Exception时候才会触发。
- test2当抛出TestAspectException或者Exception时都会触发。
```java
@RestController
@Alarm(doWarnException = Exception.class, warnExceptionExtend = false)
public class TestController {
@GetMapping("/test1")
public void test1() {
logger.error("test4", new TestAspectException());
}
@GetMapping("/test2")
@Alarm(doWarnException = TestAspectException.class, warnExceptionExtend = false)
public void test1() {
logger.error("test2", new TestAspectException());
}
}
```
### 2.4 提供多种监控通知方式
多种方式可以同时使用,设置其enabled为true即可。
#### 2.4.1 邮件
```yaml
spring:
alarm-log:
warn:
mail:
enabled: true
smtpHost: xxx
smtpPort: xxx
# 邮箱,多个用逗号分开
to: future94@qq.com,xxx
from: xxx
username: xxx
password: xxx
```
#### 2.4.2 企业微信
```yaml
spring:
alarm-log:
warn:
workweixin:
enabled: true
# 企业ID,多个用逗号分开
to: WeiLai,xxx
applicationId: xxx
corpid: xxx
corpsecret: xxx
```
#### 2.4.3 钉钉群
```yaml
spring:
alarm-log:
warn:
dingtalk:
enabled: true
token: xxx
secret: xxx
```
## 3. SpringMvc
具体示例可以查看`alarm-log-examples-spring-mv`包
### 3.1 集成
#### 引入核心包依赖
```xml
com.future94
alarm-log-core
${latest.version}
```
### 3.2 引入日志监控
#### 3.2.1 同步方式
- **log4j** : 配置项说明见[3.3.3 日志配置中设置](#333-日志配置中设置)
```xml
```
- **log4j2** : 配置项说明见[3.3.3 日志配置中设置](#333-日志配置中设置)
```xml
false
java.lang.Exception,java.lang.RuntimeException
```
- **logback** : 配置项说明见[3.3.3 日志配置中设置](#333-日志配置中设置)
```xml
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
false
java.lang.Exception,java.lang.RuntimeException
true
```
#### 3.2.2 异步方式
- **log4j** : 配置项说明见[3.3.3 日志配置中设置](#333-日志配置中设置)
```xml
```
- **log4j2** : 配置项说明见[3.3.3 日志配置中设置](#333-日志配置中设置)
```xml
false
java.lang.Exception,java.lang.RuntimeException
```
- **logback** : 配置项说明见[3.3.3 日志配置中设置](#333-日志配置中设置)
```xml
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
false
java.lang.Exception,java.lang.RuntimeException
0
0
```
### 3.3 提供多种方式获取指定的日志异常信息
#### 3.3.1 系统全局配置
- spring.alarm-log.**do-warn-exception** : 获取日志中指定的异常类全路径信息,类型为List.
- spring.alarm-log.**warn-exception-extend** : 获取日志中指定异常信息是否启动继承判断。如:do-warn-exception为java.lang.Throwable,warn-exception-extend为true,则所有java.lang.Throwable的子类(java.lang.Exception、java.lang.RuntimeException、java.io.IOException等)都会触发警告事件。
```xml
java.lang.Exception
java.lang.RuntimeException
```
#### 3.3.2 继承、实现指定类
- com.future94.alarm.log.common.exception.**AlarmLogException** : 此类继承java.lang.Exception类,继承AlarmLogException类,即当日志事件中抛出此时触发警告事件。
- com.future94.alarm.log.common.exception.**AlarmLogRuntimeException** : 此类继承java.lang.RuntimeException类,继承AlarmLogException类,即当日志事件中抛出此时触发警告事件。
- com.future94.alarm.log.common.exception.**AlarmLogDoWarnException** : 实现AlarmLogDoWarnException接口,即当日志事件中抛出此时触发警告事件。注意:目前此接口还需要是java.lang.Throwable子类,以后会修改此限制。由于java是单继承,目前项目中不方便继承AlarmLog异常时,可以使用实现此接口的方式。
#### 3.3.3 日志配置中设置
- **log4j** : doWarnException、warnExceptionExtend配置意义与上面一致。
```xml
```
- **log4j2** : doWarnException、warnExceptionExtend配置意义与上面一致。注意:标签必须为AlarmLog,name属性可以随意。
```xml
false
java.lang.Exception,java.lang.RuntimeException
```
- **logback** : doWarnException、warnExceptionExtend配置意义与上面一致。
```xml
false
java.lang.Exception,java.lang.RuntimeException
```
#### 3.3.4 使用@Alarm注解
需要引入如下依赖
```xml
com.future94
alarm-log-aspect
${latest.version}
```
并启动aop,保证可以扫描到`com.future94.alarm.log.aspect`包
```xml
```
- doWarnException、warnExceptionExtend配置意义与上面一致。
- 注解加载类上时,注解设置作用域为当前类,只对当前类生效。
- 注解加载方法上时,注解设置作用域为当前方法,只对当前方法生效。
```java
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Alarm {
Class extends Throwable>[] doWarnException() default {Throwable.class};
boolean warnExceptionExtend() default false;
}
```
**示例** :
- test1只有在抛出Exception时候才会触发。
- test2当抛出TestAspectException或者Exception时都会触发。
```java
@RestController
@Alarm(doWarnException = Exception.class, warnExceptionExtend = false)
public class TestController {
@GetMapping("/test1")
public void test1() {
logger.error("test4", new TestAspectException());
}
@GetMapping("/test2")
@Alarm(doWarnException = TestAspectException.class, warnExceptionExtend = false)
public void test1() {
logger.error("test2", new TestAspectException());
}
}
```
### 3.4 提供多种监控通知方式
多种方式可以同时使用,将其对应的bean添加到AlarmLogWarnServiceFactory即可。
```xml
```
#### 3.4.1 邮件
```xml
```
#### 3.4.2 企业微信
```xml
```
#### 3.4.3 钉钉群
```xml
```