Java日志框架
Java有好几个日志框架,我们有时在选择Java日志框架时会有点迷惑。下面几个是常用的日志框架
- Common Logging:Apache最早提供的日志的门面接口。避免和具体的日志方案直接耦合。
- SLF4J(Simple Logging Facade for JAVA):和Common Logging一样,是一个门面框架,是对不同日志框架提供的一个门面封装。可以在部署的时候不修改任何配置即可接入一种日志实现方案
- Java Util Logging:JDK提供的日志方案
- Log4j:不推荐使用。经典的日志解决方案。内部把日志系统抽象封装成Logger、appender、pattern等实现使用Log4j 2代替。
- Log4j 2:Log4j的增强版。
- Logback:SLF4默认的实现日志方案
这几种框架中,Common Logging和SLF4J为门面框架,抽象出日志的通用API供应用使用,它们会根据应用所依赖绑定具体的日志方案框架,这样应用和具体的日志方案实现了解耦。Java Util Logging,Log4j 2以及Logback为具体的日志方案。
Spring Boot日志
Spring Boot内部使用Common Logging作为门面日志框架。它会根据依赖包选择激活相应的日志实现。
支持的日志实现框架:Java Util Logging,Logback和Log4j 2。
预置配置:Spring Boot为这些日志实现框架预置了一份默认的配置,默认输出到控制台。
如果我们添加了“starter”依赖,那么默认是使用Logback作为实现。所有在没有添加其他的日志实现框架的情况下,我们不需要做额外的工作就可以使用日志了。
Spring Boot日志配置
Spring Boot预置了相关日志框架的默认配置,而application.properties有几个日志相关的配置,可以使用它们做有限度的定制。
logging.config= # 日志配置文件的路径,例如logback配置文件 `classpath:logback.xml`
logging.exception-conversion-word=%wEx # 异常记录的转换字
logging.file= # 日志文件,例如`myapp.log`
logging.level.*= # 日志级别的映射, 例如`logging.level.org.springframework=DEBUG`
logging.path= # 日志文件的路径,例如`/var/log`
logging.pattern.console= # 输出到控制台的模式。只支持默认的logback设置
logging.pattern.file= # 输出到文件的模式。 只支持默认的logback设置
logging.pattern.level= # 日志级别的输出模式 。 只支持默认的logback设置
logging.register-shutdown-hook=false # 初始化时是否注册shutdown hook
定制日志配置
除了使用Spring Boot在application.properties为我们提供的配置定制日志外,我们还可以集成相应的日志实现框架自身的配置文件。
有两种方式指定配置文件。
方式一:默认配置文件路径
- Logback:logback-spring.xml, logback-spring.groovy, logback.xml 或 logback.groovy
- Log4j2:log4j2-spring.xml 或log4j2.xml
- JDK (Java Util Logging):logging.properties
方式二:使用logging.config指定配置文件
logging.config= # 日志配置文件的路径,例如logback配置文件 `classpath:logback.xml`
集成Log4j2
集成Log4j2有两种方式:手动添加日志依赖和starter方式。推荐使用spring-boot-starter-log4j2的starter方式。
添加starter需要排除Logback的starter:spring-boot-starter-logging,配置如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</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-log4j2</artifactId>
</dependency>
手动添加Log4j2相关的依赖包,也必须添加jcl-over-slf4j依赖。
集成Logback
Spring Boot默认使用Logback作为日志实现框架。我们可以使用logback.xml或logback-spring.xml配置来定制Logback的使用。
集成Spring Boot预置的Logback配置
logback.xml 或logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<logger name="org.springframework.web" level="DEBUG"/>
</configuration>
base.xml可以让我们使用Spring Boot在application.properties里的配置属性:logging.config,logging.path,logging.exception-conversion-word。
配置输出文件
logback.xml 或logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
这里禁用了控制台输入,导入了file-appender.xml。
注意:使用logging.file指定输出文件