Spring Boot
内部采用的是Commons Logging
进行日志记录,但是也为Java Util Logging
、Logback、
Log4J2
等日志框架提供了默认配置 。Java 虽然有很多可用的日志框架,但一般来说,使用SpringBoot
默认的Logback
就完全可以了。
1. 日志格式
大概就是下面这种:
2019-01-08 13:37:20.866 INFO 9092 --- [ main] com.wzp.DemoApplication : Starting DemoApplication on Boran-35 with PID 9092 (E:\java\demo\target\classes started by zp.wei in E:\java\demo)
2019-01-08 13:37:20.868 INFO 9092 --- [ main] com.wzp.DemoApplication : No active profile set, falling back to default profiles: default
2019-01-08 13:37:22.523 INFO 9092 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2019-01-08 13:37:22.566 INFO 9092 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-01-08 13:37:22.567 INFO 9092 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/9.0.13
2019-01-08 13:37:22.575 INFO 9092 --- [ main] o.a.catalina.core.AprLifecycleListener : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [D:\Java\jdk1.8.0_172\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;D:\Java\jdk1.8.0_172\bin;D:\gradle-4.8.1\bin;D:\Git\cmd;D:\nodejs\;C:\Users\zp.wei\AppData\Roaming\npm;D:\gradle-4.8.1\bin;.]
2019-01-08 13:37:22.683 INFO 9092 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-01-08 13:37:22.684 INFO 9092 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1755 ms
2019-01-08 13:37:23.008 INFO 9092 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2019-01-08 13:37:23.282 INFO 9092 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2019-01-08 13:37:23.285 INFO 9092 --- [ main] com.wzp.DemoApplication : Started DemoApplication in 2.93 seconds (JVM running for 3.905)
- 时间日期:精确到毫秒,可以用于排序(例:2019-01-08 13:37:20.868)
- 日志级别:ERROR、WARN、INFO、DEBUG、TRACE(例:INFO)
- 进程ID(例:9092)
- 分隔符:采用
---
来标识日志开始部分(例:---
)- 线程名:方括号括起来(可能会截断控制台输出)(例:[ main])
- Logger名:通常使用源代码的类名(例:com.wzp.DemoApplication)
- 日志内容:我们输出的消息(例:No active profile set, falling back to default profiles: default)
2. 日志输出
SpringBoot
默认为我们输出的日志级别为INFO
、WARN
、ERROR
(logback
没有FATAL
级别的日志,它将被映射到ERROR
),如需要输出更多日志的时候,可以通过以下方式去开启
- 命令模式配置:
java -jar app.jar --debug=true
, 这种命令会被SpringBoot
解析,且优先级最高- 资源文件配置:
application.properties
配置debug=true
即可。该配置只对 嵌入式容器、Spring、Hibernate生效,自己的项目想要输出DEBUG
需要额外配置
# 日志输出级别的配置
logging.level.root = WARN
logging.level.org.springframework.web = DEBUG
logging.level.org.hibernate = ERROR
2.1. 日志输出格式配置
logging.pattern.console:定义输出到控制台的格式(不支持JDK Logger)
logging.pattern.file:定义输出到文件的格式(不支持JDK Logger)
上面的一般写在 application.properties 配置文件里,下面这种一般这种写在 logback.xml
文件中
<!-- 文件输出格式 -->
<property name="PATTERN" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] -| %msg%n"/>
<!-- prod文件路径 -->
<property name="PROD_FILE_PATH" value="/data/wzp/logs"/>
3. 日志文件保存
SpringBoot
仅将日志输出到控制台,不会写入到日志文件中去。如果除了控制台输出之外还想写日志文件,则需要在application.properties
设置logging.path
或logging.file
属性
- logging.path:将名为
spring.log
写入到指定的文件夹中,如(/date/logs
)- logging.file:将日志写入到指定的文件中,默认为相对路径,当然了,我们也可以设置成绝对路径
日志文件在达到
xxMB
时进行切割,产生一个新的日志文件(如:spring-1.log、spring-2.log
...),新的日志依旧输出到spring.log
中去,默认情况下会记录ERROR
、WARN
、INFO
级别消息。
- logging.file.max-size:设置日志文件大小
- logging.file.max-history:设置日志保留天数
4. 日志扩展配置
在这里我们用 logback 进行举例,而且该扩展配置仅适用
logback-spring.xml
或者设置logging.config
属性的文件,因为logback.xml
文件加载过早,它无法获取SpringBoot
的扩展属性...使用
springProfile
或者springProperty
让你的logback-spring.xml
配置更简单和清晰(在这里,我就只写springProfile
这个了,springProperty
也简单,相信你们自己都会的
...)
<!-- 开发环境时激活 -->
<springProfile name="dev">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${PATTERN}</pattern>
</encoder>
</appender>
<logger name="com.roncoo.education" level="debug"/>
<root level="info">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
<!-- 测试环境时激活-->
<springProfile name="test">
</springProfile>
<!-- 生产环境时激活-->
<springProfile name="prod">
</springProfile>
5. 结语
按照惯例写个结语,嗯...看了很多大佬的教程,结合我自己的总结了一波,当然了,不足之处请多包涵,也请多指教...如有雷同,也请多包涵...嘻嘻...
注:如有需要,可自行转载,但是要加上原创作者及原文章链接哦...