1、简介
Spring Boot内部日志系统使用的是Commons Logging,但开放底层的日志实现。默认为会Java Util Logging, Log4J, Log4J2和Logback提供配置。每种情况下都会预先配置使用控制台输出,也可以使用可选的文件输出。
2、日志格式
默认的日志输出格式为:
1 2018-01-20 19:31:23.317 INFO 93864 --- [ main] TestProperties : Starting TestProperties on ith PID 93864 (started by Administrator in
2 2018-01-20 19:31:23.318 INFO 93864 --- [ main] TestProperties : The following profiles are active: dev
3 2018-01-20 19:31:23.429 INFO 93864 --- [ main] o.s.w.c.s.GenericWebApplicationContext : Refreshing org.springframework.web.context.support.GenericWebApplicationContext@368f2016: startup date [Sat Jan 20 19:31:23 CST 2018]; root of context hierarchy
节点输出包括:
- 日期和时间:精确到毫秒
- 日志级别:ERROR, WARN, INFO, DEBUG, TRACE
- process ID
- 分隔符---: 标识日志信息开头
- 线程名 - 包括在方括号中(控制台输出可能会被截断)
- 日志名 - 通常是源class的类名(缩写)
- 日志信息
3、控制台输出
在spring boot中默认配置了ERROR, WARN, INFO级别的信息输出到控制台。
开启控制台的DEBUG级别日志记录方法:
(1)通过 --debug 标识,如:java -jar myapp.jar --debug
(2)在application.properties中配置debug=true,该属性置为true的时候,核心Logger(包含嵌入式容器、hibernate、spring)会输出更多内容,但是你自己应用的日志并不会输出为DEBUG级别。
4、文件输出
默认情况下,spring boot日志只会输出到控制台,而不会写进日志文件,如果需要增加输出到日志文件,则需要在配置文件中添加logging.file活logging.path属性。配置组合结果:
logging.file
logging.path
示例
描述
只记录到控制台
文件
my.log
写到特定的日志文件里,名称可以是一个精确的位置或相对于当前目录
目录
/var/log
写到特定文件夹下的spring.log里,名称可以是一个精确的位置或相对于当前目录
日志文件每达到10M会进行分割。
如果logging.file和logging.path都配置了,那么只会以file配置的为准。
5、日志级别控制
可以在配置文件中配置日志记录什么级别的日志。设置方法: 'logging.level.*=LEVEL'('LEVEL'是TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF中的一个, *为包名或logger名)
例子:
logging.level.org.springframework.web: DEBUG : org.springframework.web包下所有class以DEBUG级别输出
logging.level.root=WARN
:root日志以WARN级别输出
6、自定义日志
Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml)。根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:
Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2:log4j2-spring.xml, log4j2.xml
JDK (java Util Logging):logging.propertie
1 <?xml version="1.0" encoding="UTF-8"?> 2 <configuration debug="false"> 3 <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> 4 <property name="LOG_HOME" value="D:\\日志" /> 5 6 <!-- 控制台输出 --> 7 <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> 8 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 9 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 10 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 11 </encoder> 12 </appender> 13 14 <!-- 按照每天生成日志文件 --> 15 <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> 16 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 17 <!--日志文件输出的文件名--> 18 <FileNamePattern>${LOG_HOME}/spring-error-%d{yyyy-MM-dd}.log</FileNamePattern> 19 <!--日志文件保留天数--> 20 <MaxHistory>30</MaxHistory> 21 </rollingPolicy> 22 23 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 24 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 25 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 26 </encoder> 27 28 <!--日志文件最大的大小--> 29 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 30 <MaxFileSize>100MB</MaxFileSize> 31 </triggeringPolicy> 32 33 <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 --> 34 <level>ERROR</level> 35 <onMatch>ACCEPT</onMatch> 36 <onMismatch>DENY</onMismatch> 37 </filter> 38 </appender> 39 40 <!-- 按照每天生成日志文件 info级别 --> 41 <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> 42 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 43 <!--日志文件输出的文件名--> 44 <FileNamePattern>${LOG_HOME}/spring-info-%d{yyyy-MM-dd}.log</FileNamePattern> 45 <!--日志文件保留天数--> 46 <MaxHistory>30</MaxHistory> 47 </rollingPolicy> 48 49 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 50 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 51 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 52 </encoder> 53 54 <!--日志文件最大的大小--> 55 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 56 <MaxFileSize>100MB</MaxFileSize> 57 </triggeringPolicy> 58 59 <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 --> 60 <level>INFO</level> 61 <onMatch>ACCEPT</onMatch> 62 <onMismatch>DENY</onMismatch> 63 </filter> 64 </appender> 65 66 <!-- show parameters for hibernate sql 专为 Hibernate 定制 --> 67 <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /> 68 <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" /> 69 <logger name="org.hibernate.SQL" level="DEBUG" /> 70 <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" /> 71 <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" /> 72 73 <!--myibatis log configure--> 74 <logger name="com.apache.ibatis" level="TRACE"/> 75 <logger name="java.sql.Connection" level="DEBUG"/> 76 <logger name="java.sql.Statement" level="DEBUG"/> 77 <logger name="java.sql.PreparedStatement" level="DEBUG"/> 78 79 <!--日志打印的包的范围,及分类日志文件存储, 80 name:记录日志的包 81 level:记录日志的级别 82 appender-ref:引用上方设置的appender 83 --> 84 <logger name="cn.origal" additivity="false"> 85 <level value="DEBUG" /> 86 <appender-ref ref="console"/> 87 <appender-ref ref="ERROR"/> 88 <appender-ref ref="INFO" /> 89 </logger> 90 91 <!--必选节点,用来指定最基础的日志输出级别--> 92 <root level="info"> 93 <appender-ref ref="console" /> 94 <appender-ref ref="INFO" /> 95 </root> 96 </configuration>
日志记录方式: