参考Spring Boot官方文档 日志部分
Spring Boot默认情况下,当使用"Starters" 使用Logback输出日志
, 还包括适当的Logback路由, 确保其他的日志框架(Java Util Logging, Commons Logging, Log4j, SLF4J)都能正常使用
Sping Boot文档的 26.5 Custom Log Configuration 章节,说明了自定义日志配置方法
多样的日志系统可以通过
- 添加适当的日志框架库到classpath
- 适当的配置配置文件加入到classpath的根目录 或者 其他的本地目录, 使用Spring配置
loggin.config
配置指定配置文件
依赖于开发者选择的日志框架. 这些对应的配置文件会被加载
日志框架 | 配置文件 |
---|---|
Logback | logback-spring.xml , logback-spring.groovy , logback.xml , logback.groovy |
Log4j2 | log4j2-spring.xml , log4j2.xml |
JDK(JAVA Util Logging) | logging.properties |
引入Log4j2日志框架
Log4j2为何物就不介绍了. Log4j2官网
配置的方案 在官方文档 77.2 Configure Log4j for Logging
1. Maven依赖配置
pom.xml
中去掉Logback, 引入log4j2
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-logging
org.springframework.boot
spring-boot-starter-log4j2
2. 配置文件
2.1 log4j2.xml
使用xml格式配置文件, 无需添加额外的依赖库.
2.2 log4j2.yaml / log4j2.yml
使用 yaml/yml格式配置文件. 需要额外引入依赖库
com.fasterxml.jackson.core
jackson-databind
com.fasterxml.jackson.dataformat
jackson-dataformat-yaml
2.3 log4j2.json
使用 json 格式配置文件, 需要额外引入依赖库
com.fasterxml.jackson.core
jackson-databind
3. 修改spring boot配置
指定spring boot配置文件
application.yaml
文件配置如下
logging:
config: classpath:log4j2.xml
Log4j2日志配置
如需了解Log4j2详尽的配置, 可访问官方文档
概述
大概介绍一下Log4j2的基本信息
日志的Level分为:
- trace (追踪)
- debug (调试)
- info (信息)
- warn (警告)
- error (错误)
- fatal (严重错误)
这里介绍一下博主经常使用的一种日志方式 RollingFileAppender
以一个具体的配置为例
/tmp/log4j2
[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n
[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n
1. Configuration 参数
status
: Level枚举型, 控制输出Log4j事件信息, 默认 errorname
: 配置名称strict
: 是否使用严格的XML格式. 推荐使用, 规范开发者的配置编写, 不支持jsonp配置- ... 其他几个配置可以参考官方文档
2. Properties
设置配置文件全局的参数变量. 用于减少自定义配置信息的重复编码.
/tmp/log4j2
配置下文中, 可以使用 ${filepath}
来代替 /tmp/log4j2
3. Appenders
Log4j2提供了丰富的Appender
- AsyncAppender 设置appender异步方式输出日志
- CassandraAppender 输出至Cassandra存储
- ConsoleAppender 输出控制台
- FailoverAppender 设置appender错误重试
- FileAppender 输出至文件
- FlumeAppender 输出至Flume
- JDBCAppender 输出至JDBC连接的关系型数据库表
- JMS Appender 输出至消息服务
- JPAAppender 输出至使用JPA连接的关系行数据库
- HttpAppender 输出至Http Service
- KafkaAppender 输出至Kafka
- MemoryMappedFileAppender 输出至内存
- NoSQLAppender 输出至NoSQL数据库
- OutputStreamAppender File/Socket类型的Appender
- RandomAccessFileAppender 性能是FileAppder的0.2-2倍
- RollingFileAppender 输出至文件, 文件能按照规则打包文件
- RollingRandomAccessFileAppender 同上
- SMTPAppender 邮件形式输出
- SocketAppender socket方式发送日志
项目中比较常用的是 ConsoleAppender
和 RollingFileAppender
.
接下来对上述的Appender配置参数的说明
[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n
[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n
3.2 日志输出规则 Layouts
Layout有多种格式输出
- CSV
- GELF
- HTML
- JSON
- Pattern
- ....
项目中一般使用Pattern 按行输出逐条信息, 配置如下:
[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n
%
+ char/word
代表一种输出的信息或者格式
时间 %d / %date
格式 | 输出 |
---|---|
%d, %d{DEFAULT} | 2012-11-02 14:34:02,781 |
%d{UNIX} | 1351866842 |
%d{UNIX_MILLIS} | 1351866842781 |
%d{yyyy-MM-dd HH:mm:ss,SSS} | 2012-11-02 14:34:02,781 |
类 %c / %logger
输出调用的类名
%c{number} , 控制类型的长度
等级 %level
输出等级 TRACE, DEBUG, INFO, WARN, ERROR, FATAL
颜色格式 %highlight
%heighlight{xxx}
xxx将会带有颜色样式, 并且和Level相关, 一般用于debug调试信息使用
日志内容 %m / %msg / %message
可添加文本样式
换行 %n
根据操作系统的输出不同的换行标识符用户日志换行, 最好别使用 \n
, \r\n
等换行符号
其他还有很多标识符号, 参考 官方文档
4. Loggers
- 必须包含一个
Root
元素, 不设置Root
元素, 将会默认使用类似如下的配置
- 配置其他开发者自定义的
Logger
使用Logger
以demo为例
package info.chiwm.log4j2.service;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Service;
/**
* @author [email protected]
* @ClassName: Log4j2ServiceImpl
* @Description:
* @date 2018/1/4 上午11:10
*/
@Service
public class Log4j2ServiceImpl implements Log4j2Service {
// 使用LogManager获取配置Logger
private static Logger logger = LogManager.getLogger("fileLogger");
@Override
public void info(String msg) {
// 输出日志
// 特别注意 不要使用 `+` 去拼接信息, 这样在控制输出级别之后, 有些日志操作不会打印, 但是它去操作了新字符串创建, 使用 `{}` 去代替 `+`
logger.info("info {}", msg);
}
@Override
public void error() {
logger.error("error");
}
@Override
public void warn() {
logger.warn("warn");
}
@Override
public void debug() {
logger.debug("debug");
}
@Override
public void trace() {
logger.trace("trace");
}
}
总结
前面的配置步骤,配置,使用步骤,大概描述了Log4j2的使用.
欢迎评论区指出错误或者探讨相关的问题