1、简介
Spring Boot内部日志系统使用的是Commons Logging,但开放底层的日志实现。默认为会Java Util Logging, Log4J, Log4J2和Logback提供配置。每种情况下都会预先配置使用控制台输出,也可以使用可选的文件输出。
2、日志格式
默认的日志输出格式为:
11 2018-01-20 19:31:23.317 INFO 93864 --- [ main] TestProperties : Starting TestProperties on ith PID 93864 (started by Administrator in 22 2018-01-20 19:31:23.318 INFO 93864 --- [ main] TestProperties : The following profiles are active: dev 33 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 1 <?xml version="1.0" encoding="UTF-8"?> 2 2 <configuration debug="false"> 3 3 <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> 4 4 <property name="LOG_HOME" value="D:\\日志" /> 5 5 6 6 <!-- 控制台输出 --> 7 7 <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> 8 8 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 9 9 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 1010 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 1111 </encoder> 1212 </appender> 1313 1414 <!-- 按照每天生成日志文件 --> 1515 <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> 1616 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 1717 <!--日志文件输出的文件名--> 1818 <FileNamePattern>${LOG_HOME}/spring-error-%d{yyyy-MM-dd}.log</FileNamePattern> 1919 <!--日志文件保留天数--> 2020 <MaxHistory>30</MaxHistory> 2121 </rollingPolicy> 2222 2323 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 2424 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 2525 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 2626 </encoder> 2727 2828 <!--日志文件最大的大小--> 2929 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 3030 <MaxFileSize>100MB</MaxFileSize> 3131 </triggeringPolicy> 3232 3333 <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 --> 3434 <level>ERROR</level> 3535 <onMatch>ACCEPT</onMatch> 3636 <onMismatch>DENY</onMismatch> 3737 </filter> 3838 </appender> 3939 4040 <!-- 按照每天生成日志文件 info级别 --> 4141 <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> 4242 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 4343 <!--日志文件输出的文件名--> 4444 <FileNamePattern>${LOG_HOME}/spring-info-%d{yyyy-MM-dd}.log</FileNamePattern> 4545 <!--日志文件保留天数--> 4646 <MaxHistory>30</MaxHistory> 4747 </rollingPolicy> 4848 4949 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 5050 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 5151 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 5252 </encoder> 5353 5454 <!--日志文件最大的大小--> 5555 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 5656 <MaxFileSize>100MB</MaxFileSize> 5757 </triggeringPolicy> 5858 5959 <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 --> 6060 <level>INFO</level> 6161 <onMatch>ACCEPT</onMatch> 6262 <onMismatch>DENY</onMismatch> 6363 </filter> 6464 </appender> 6565 6666 <!-- show parameters for hibernate sql 专为 Hibernate 定制 --> 6767 <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /> 6868 <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" /> 6969 <logger name="org.hibernate.SQL" level="DEBUG" /> 7070 <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" /> 7171 <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" /> 7272 7373 <!--myibatis log configure--> 7474 <logger name="com.apache.ibatis" level="TRACE"/> 7575 <logger name="java.sql.Connection" level="DEBUG"/> 7676 <logger name="java.sql.Statement" level="DEBUG"/> 7777 <logger name="java.sql.PreparedStatement" level="DEBUG"/> 7878 7979 <!--日志打印的包的范围,及分类日志文件存储, 8080 name:记录日志的包 8181 level:记录日志的级别 8282 appender-ref:引用上方设置的appender 8383 --> 8484 <logger name="cn.origal" additivity="false"> 8585 <level value="DEBUG" /> 8686 <appender-ref ref="console"/> 8787 <appender-ref ref="ERROR"/> 8888 <appender-ref ref="INFO" /> 8989 </logger> 9090 9191 <!--必选节点,用来指定最基础的日志输出级别--> 9292 <root level="info"> 9393 <appender-ref ref="console" /> 9494 <appender-ref ref="INFO" /> 9595 </root> 9696 </configuration>日志记录方式:
