Spring Boot Log Configuration
Spring Boot 默认日志
如果是继承Starter使用Spring Boot,则默认使用的是logback,不过不用担心,不管依赖的那些库使用的是什么日志框架,通常你不需要改变任何日志依赖,Springboot可以确保那些框架都能正常的工作。
Log Level
默认情况下springboot会将info及以上级别的log回显在console里,可以使用debug=true
或trace=true
显示更加详细的日志。
也可以指定某些特定类的日志输出级别,例如之前使用的ucc依赖,心跳日志是info级别特别烦人。在配置文件中设置logging.level.com.jverson.springboot.HelloWorld = WARN
即可将HelloWorld类的日志输出限制为WARN级别。
logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
File output
默认情况下Springboot只会将日志输出到console,并不会输出为文件。如果需要记录为文件则需要在配置文件中指定日志输出路径(logging.file)和名称(logging.path)。
例如在配置文件中设置logging.file = /export/Logs/mylog.log
,则日志便会输出到该目录下,并且文件大小达到10MB时便会自动分割。但是发现这样并没有办法将日志按照Level输出到不同的文件中,如果想实现则需要在classpath下添加logback-spring.xml
(推荐)或logback.xml
配置文件。
Custom log configuration
如果不想使用默认的logback日志框架,可以添加其它框架的依赖(例如log4j2),Log4j2.0基于LMAX Disruptor的异步日志在多线程环境下性能会远远优于Log4j1.x和logback(官方数据是10倍以上)。具体的使用流程如下:
首先添加log4j2的依赖,并将springboot自带的log框架排除掉
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- use log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!--使用log4j2的AsyncLogger需要包含disruptor-->
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.3.4</version>
</dependency>
然后添加log4j2的配置文件log4j2-spring.xml
(按照命名规范命名的话可以不需要再properties文件中设置logging.config = classpath:log4j2-spring.xml
),典型的配置内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF" monitorInterval="1800">
<properties>
<property name="LOG_HOME">/export/Logs/jverson.com</property>
<property name="RUNNING_FILE_NAME">spring-boot-test</property>
<property name="ERROR_FILE_NAME">spring-boot-test-error</property>
</properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss.SSS} [%t] %-5level %class{36} [%L] [%M] - %msg%xEx%n" />
</Console>
<RollingRandomAccessFile name="RUNNING-LOG" fileName="${LOG_HOME}/${RUNNING_FILE_NAME}.log" filePattern="${LOG_HOME}/${RUNNING_FILE_NAME}_%d{yyyy-MM-dd}_%i.log">
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss.SSS} [%t] %-5level %class{36} [%L] [%M] - %msg%xEx%n" />
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="24" />
<SizeBasedTriggeringPolicy size="51200 KB" />
</Policies>
<DefaultRolloverStrategy max="20" />
</RollingRandomAccessFile>
<RollingRandomAccessFile name="ERROR-LOG" fileName="${LOG_HOME}/${ERROR_FILE_NAME}.log" filePattern="${LOG_HOME}/${ERROR_FILE_NAME}_%d{yyyy-MM-dd}_%i.log">
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss.SSS} [%t] %-5level %class{36} [%L] [%M] - %msg%xEx%n" />
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="24" />
<SizeBasedTriggeringPolicy size="51200 KB" />
</Policies>
<DefaultRolloverStrategy max="20" />
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<AsyncRoot level="INFO" includeLocation="true">
<appender-ref ref="Console" />
<appender-ref ref="RUNNING-LOG" />
<appender-ref ref="ERROR-LOG" />
</AsyncRoot>
</Loggers>
</Configuration>
Add color to eclipse console output by log level
如果你希望console里的日志能够按照不同的级别有不同的着色,如下图这样便于查看错误和异常日志,有一个很好用的eclipse插件Grep console
可以帮你实现。
首先安装Grep console插件,在help页签eclipse market中搜索Grep console并安装(完成后需要重启eclipse),然后在preferences中进行设置如下图,一定注意将expression由.*(\Q[FATAL]\E).*
改为.*(\QFATAL\E).*
,要不然不会生效。
另外可以在windows页签view中选择将grep view窗口展示出来,可以将一些日志过滤到grep view中,便于查看。
关于grep console的更多设置及其含义可以参考以下链接: