参考Spring Boot官方文档 日志部分html
Spring Boot默认状况下,当使用"Starters" 使用Logback输出日志
, 还包括适当的Logback路由, 确保其余的日志框架(Java Util Logging, Commons Logging, Log4j, SLF4J)都能正常使用java
Sping Boot文档的 26.5 Custom Log Configuration 章节,说明了自定义日志配置方法web
多样的日志系统能够经过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官网apache
配置的方案 在官方文档 77.2 Configure Log4j for Loggingjson
pom.xml
中去掉Logback, 引入log4j2app
<!-- 节选 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-log4j2 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
使用xml格式配置文件, 无需添加额外的依赖库.框架
使用 yaml/yml格式配置文件. 须要额外引入依赖库dom
<!-- 解析yml配置 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> </dependency>
使用 json 格式配置文件, 须要额外引入依赖库
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>
指定spring boot配置文件
application.yaml
文件配置以下
logging: config: classpath:log4j2.xml
如需了解Log4j2详尽的配置, 可访问官方文档
大概介绍一下Log4j2的基本信息
日志的Level分为:
这里介绍一下博主常常使用的一种日志方式 RollingFileAppender
以一个具体的配置为例
<?xml version="1.0" encoding="UTF-8" ?> <Configuration status="trace" strict="true" name="LogConfig"> <Properties> <Property name="filepath">/tmp/log4j2</Property> </Properties> <Appenders> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout> <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern> </PatternLayout> </Console> <RollingFile name="logService" fileName="${filepath}/logService.log" filePattern="${filepath}/bak/logService-%d{yy-MM-dd HH:mm:ss}.log.gz"> <PatternLayout> <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern> </PatternLayout> <Policies> <CronTriggeringPolicy schedule="1 * * * * ?" evaluateOnStartup="true"/> </Policies> </RollingFile> </Appenders> <Loggers> <Logger name="fileLogger" level="debug" additivity="false"> <AppenderRef ref="logService"/> <AppenderRef ref="STDOUT"/> </Logger> <Root level="trace"> <AppenderRef ref="STDOUT"/> </Root> </Loggers> </Configuration>
status
: Level枚举型, 控制输出Log4j事件信息, 默认 errorname
: 配置名称strict
: 是否使用严格的XML格式. 推荐使用, 规范开发者的配置编写, 不支持jsonp配置设置配置文件全局的参数变量. 用于减小自定义配置信息的重复编码.
<Properties> <Property name="filepath">/tmp/log4j2</Property> </Properties>
配置下文中, 可使用 ${filepath}
来代替 /tmp/log4j2
Log4j2提供了丰富的Appender
项目中比较经常使用的是 ConsoleAppender
和 RollingFileAppender
.
接下来对上述的Appender配置参数的说明
<Appenders> <!-- ConsoleAppender --> <!-- name Appender名称 --> <!-- target 枚举型(SYSTEM_OUT, SYSTEM_ERR). 默认 SYSTEM_OUT --> <Console name="STDOUT" target="SYSTEM_OUT"> <!-- 输出格式 详细配置见下文 --> <PatternLayout> <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern> </PatternLayout> </Console> <!-- RollingFileAppender --> <!-- fileName 输出的问题名称, 使用绝对路径确保日志位置的正确性, 而且确保目录有进程用户可写权限 --> <!-- filePattern 日志回滚的文件命名规则 --> <RollingFile name="logService" fileName="${filepath}/logService.log" filePattern="${filepath}/bak/logService-%d{yy-MM-dd HH:mm:ss}.log.gz"> <PatternLayout> <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern> </PatternLayout> <Policies> <!-- 按Cron定时任务回滚文件--> <!-- schedule Cron表达式 --> <!-- evaluateOnStartup (规则: 启动时,检查判断目标文件最后的修改时间, 若是cron规则判断该文件须要回滚,则直接回滚文件.) 是否开启该规则操做 --> <CronTriggeringPolicy schedule="1 * * * * ?" evaluateOnStartup="true"/> </Policies> </RollingFile> </Appenders>
Layout有多种格式输出
项目中通常使用Pattern 按行输出逐条信息, 配置以下:
<!-- 节选配置 --> <PatternLayout> <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern> </PatternLayout>
%
+ char/word
表明一种输出的信息或者格式
格式 | 输出 |
---|---|
%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{number} , 控制类型的长度
输出等级 TRACE, DEBUG, INFO, WARN, ERROR, FATAL
%heighlight{xxx}
xxx将会带有颜色样式, 而且和Level相关, 通常用于debug调试信息使用
可添加文本样式
根据操做系统的输出不一样的换行标识符用户日志换行, 最好别使用 \n
, \r\n
等换行符号
其余还有不少标识符号, 参考 官方文档
Root
元素, 不设置 Root
元素, 将会默认使用相似以下的配置<Root level="error"> <AppenderRef ref="Console" /> </Root>
Logger
<Loggers> <!-- name 必填且惟一 --> <!-- level 设置输出最低级别 默认error --> <!-- additivity 是否在父Logger输出, 默认 true --> <Logger name="fileLogger" level="debug" additivity="false"> <!-- 上文中定义的Appender name --> <AppenderRef ref="logService"/> <AppenderRef ref="STDOUT"/> </Logger> <Root level="ERROR"> <AppenderRef ref="STDOUT"/> </Root> </Loggers>
以demo为例
package info.chiwm.log4j2.service; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.stereotype.Service; /** * @author chiwm@kuyumall.com * @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的使用.
欢迎评论区指出错误或者探讨相关的问题