Spring Boot使用Commons Logging记录全部内部日志,可是它将底层日志实现打开,为Java.Util.Logging,Log4J2和Logback提供默认配置。 在每一个案例中,loggers都预先配置,以使用控制台输出,同时还提供可选的文件输出。html
默认状况下,若是你使用“starters”,Logback将会被用于记录日志。还包括占用Logback路由,以确保使用Java Util Logging、Commons logging、Log4J或SLF4J的依赖库都能正常工做。java
SLF4J——Simple Logging Facade For Java,它是一个针对于各种Java日志框架的统一Facade抽象。Java日志框架众多——经常使用的有java.util.logging
, log4j
, logback
,commons-logging
, Spring框架使用的是Jakarta Commons Logging API (JCL)。而SLF4J定义了统一的日志抽象接口,而真正的日志实现则是在运行时决定的——它提供了各种日志框架的绑定。web
Logback是log4j框架的做者开发的新一代日志框架,它效率更高、可以适应诸多的运行环境,同时自然支持SLF4J。spring
默认状况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。在运行应用程序和其余例子时,能够看到不少INFO级别的日志。sql
从上图能够看到,日志输出内容元素具体以下:apache
---
标识实际日志的开始用Logback来记录日志,需添加日志依赖api
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency>
实际开发中咱们不须要直接添加该依赖,你会发现spring-boot-starter其中包含了spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback。安全
日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,若是设置为WARN,则低于WARN的信息都不会输出。Spring Boot中默认配置ERROR
、WARN
和INFO
级别的日志输出到控制台。您还能够经过启动您的应用程序–debug标志来启用“调试”模式(开发的时候推荐开启),如下两种方式皆可:oracle
--debug
标志,如:$ java -jar springTest.jar --debug
application.properties
中配置debug=true
,该属性置为true的时候,核心Loggers(包含嵌入式容器、hibernate、spring)会输出更多内容,启用debug模式并不会使用debug级别配置您的应用程序来记录全部信息。或者,您能够经过在应用程序中使用-trace标志(或在application.properties中配置trace=true)启动应用程序来启用“跟踪”模式。app
默认状况下,Spring Boot将日志输出到控制台,不会写到日志文件。若是要编写除控制台输出以外的日志文件,则需在application.properties中设置logging.file或logging.path属性。
logging.file=my.log
logging.path=/var/log
默认状况下,日志文件的大小达到10MB时会切分一次,产生新的日志文件,默认级别为:ERROR、WARN、INFO
日志系统在应用程序生命周期的早期被初始化,而且在经过@propertysource注解加载的属性文件中不会找到这样的日志属性。
日志属性与实际的日志基础结构无关。所以,特定的配置键(例如logback中的
logback.configurationFile
)不是由spring boot管理的。
省略...
全部支持日志记录的系统均可以在Spring环境中设置记录级别(例如在application.properties中)
格式为:’logging.level.* = LEVEL’
logging.level
:日志级别控制前缀,*
为包名或Logger名LEVEL
:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF root日志可使用 logging.level.root
配置,application.properties实例:
logging.level.root=WARN logging.level.org.springframework.web=DEBUG logging.level.org.hibernate=ERROR
默认状况下,Spring boot对 Thymeleaf
INFO
消息进行了从新映射,使它们在调试级别上被记录,这有助于减小标准日志输出中的噪声。有关如何在本身的配置中应用从新映射的详细信息,请参阅LevelRemappingAppender。
能够经过在classpath中包含适当的库来激活各类日志系统,并经过在classpath根目录提供适当的配置进行定制。或者在适当的位置提供spring 环境属性logging.config。
还能够强制spring boot使用特定的日志系统经过使用 org.springframework.boot.logging.LoggingSystem
系统属性。 该值应该是一个 LoggingSystem
实现的彻底限定类名。 您还可使用none值彻底禁用Spring boot的日志记录配置。
因为日志是在应用程序applicationContext上下文建立以前初始化的,因此不可能在Spring @configuration注解文件中控制来自@propertySource的日志记录。系统属性和常规的Spring boot外部配置文件已经工做得很好。
根据不一样的日志系统,你能够按以下规则组织配置文件名,就能被正确加载:
logback-spring.xml
, logback-spring.groovy
, logback.xml
, logback.groovy
log4j2-spring.xml
, log4j2.xml
logging.properties
在可能的状况下,咱们建议您使用-spring变体来进行日志配置( 如使用logback-spring.xml
,而不是logback.xml
)。若是使用标准配置logback.xml
,Spring没法彻底控制日志初始化。 Spring boot包含许多对Logback的扩展,能够帮助高级配置,您能够在您的logback-spring.xml文件中使用这些扩展。在标准配置logback.xml中不能使用这些扩展由于它太早被加载,固然若是必定要使用,需定义一个 logging.config
属性。
注:这些扩展不能与Logback的配置扫描一块儿使用。若是您尝试这样作,对配置文件进行更改将致使相似于如下日志记录之一的错误:
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]] ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]
Logback是由log4j创始人设计的又一个开源日志组件。logback当前分红三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你能够很方便地更换成其它日志系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供经过Http来访问日志的功能。 Logback是要与SLF4J结合起来用两个组件的官方网站以下:
logback的官方网站: http://logback.qos.ch
SLF4J的官方网站:http://www.slf4j.org
Logback和log4j是很是类似的,若是你对log4j很熟悉,那对logback很快就会驾轻就熟。下面列了logback相对于log4j的一些优势:
总之,logback比log4j优秀。
Logback 配置文件的语法很是灵活。正由于灵活,因此没法用 DTD 或 XML schema 进行定义。尽管如此,能够这样描述配置文件的基本结构:以<configuration>开头,后面有零个或多个<appender>元素,有零个或多个<logger>元素,有最多一个<root>元素。
logback配置文件实例:
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="/home" /> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <!-- 按照天天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern> <!--日志文件保留天数--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!--myibatis log configure--> <logger name="com.apache.ibatis" level="TRACE"/> <logger name="java.sql.Connection" level="DEBUG"/> <logger name="java.sql.Statement" level="DEBUG"/> <logger name="java.sql.PreparedStatement" level="DEBUG"/> <!-- 日志输出级别 --> <root level="INFO"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> </configuration>