(1) 引包
(注:当排除默认logback日志时,放spring-boot-starter-web下不能把logback清理干净,报Class path contains multiple SLF4J bindings.)
<!-- 发邮件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- log related -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions><!-- 去掉默认log配置 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入log4j2依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- 支持识别yml配置 -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.9.7</version>
</dependency>
<!-- 解析yml配置 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.7</version>
</dependency>
<!-- end of log related -->
(2) 在resource下创建log4j2.yml文件
Configuration:
appenders:
Console:
name: Console
target: SYSTEM_OUT
PatternLayout:
Pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n"
RollingFile:
-
name: ROLLING_FILE
ignoreExceptions: false
fileName: ../logs/log4j2.log
filePattern: "../logs/log4j2-%d{yyyy-MM-dd}-%i.log"
PatternLayout:
Pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n"
Policies:
TimeBasedTriggeringPolicy:
modulate: true
interval: 1
SizeBasedTriggeringPolicy:
size: 2MB
DefaultRolloverStrategy:
max: 20
SMTP:
name: Mailer
subject: ERROR LOG
to: tiantaoyin@foxmail.com # 多收件人(以逗号隔开 ****@qq.com,****@163.com)
from:*****@qq.com
smtpHost: smtp.qq.com
smtpPort: 25
smtpProtocol: smtp
smtpUsername: *****@qq.com
smtpPassword: yourpassword
smtpDebug: false # 是否开启发邮件调试模式
bufferSize: 1024
# Async:
# name: AsyncMailer
# appender-ref: Mailer
Loggers:
root:
level: INFO
appender-ref:
-
ref: Console
-
ref: ROLLING_FILE
Logger: #单独设置某些包的输出级别
-
name: org.springframework.web
additivity: false #去除重复的log
level: error
appender-ref:
-
ref: Console
-
ref: ROLLING_FILE
-
name: org.springboot.sample
additivity: false
level: error
appender-ref:
-
ref: Console
-
ref: ROLLING_FILE
-
name: com.alibaba.druid
additivity: false
level: error
appender-ref:
-
ref: Console
-
ref: ROLLING_FILE
-
name: AsyncMailerLogger
additivity: false
level: error
appender-ref:
-
ref: Mailer
(3) 使用方式:【注:application.yml中就不必设置logger.config了】
private static final Logger LOGGER_MAIL = LoggerFactory.getLogger("AsyncMailerLogger");
LOGGER_MAIL.error("你好!");
总结:
1. 当把使用方式放spring boot的mian方法下使用时,会直接运行被拦截死,因为bean创建都未完成,直接调用肯定失败。
2. log4j2与logback的使用:lombok 提供了@Slf4j注解 @Log4j2注解