Logback
Logback,一个“可靠、通用、快速而又灵活的Java日志框架”。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。
- logback-core: Joran, Status, context, pattern parsing
- logback-classic: developer logging
- logback-access: The log generated when a user accesses a web-page on a web server. Integrates seamlessly with Jetty and Tomcat.
选择logback的理由:
- logback比log4j要快大约10倍,而且消耗更少的内存。
- logback-classic模块直接实现了SLF4J的接口,所以我们迁移到logback几乎是零开销的。
- logback不仅支持xml格式的配置文件,还支持groovy格式的配置文件。相比之下,Groovy风格的配置文件更加直观,简洁。
- logback-classic能够检测到配置文件的更新,并且自动重新加载配置文件。
- logback能够优雅的从I/O异常中恢复,从而我们不用重新启动应用程序来恢复logger。
- logback能够根据配置文件中设置的上限值,自动删除旧的日志文件。
- logback能够自动压缩日志文件。
- logback能够在配置文件中加入条件判断(if-then-else)。可以避免不同的开发环境(dev、test、uat…)的配置文件的重复。
- logback带来更多的filter。
- logback的stack trace中会包含详细的包信息。
- logback-access和Jetty、Tomcat集成提供了功能强大的HTTP-access日志。
配置文件:需要在项目的src目录下建立一个logback.xml。
注:(1)logback首先会试着查找logback.groovy文件;
(2)当没有找到时,继续试着查找logback-test.xml文件;
(3)当没有找到时,继续试着查找logback.xml文件;
(4)如果仍然没有找到,则使用默认配置(打印到控制台)。
logback的一些配置介绍:
* 控制台输出
在Spring Boot中默认配置了ERROR、WARN和INFO级别的日志输出到控制台。我们可以通过两种方式切换至DEBUG级别:
在运行命令后加入–debug标志,如:$ java -jar test.jar --debug
在application.properties中配置debug=true
,该属性置为true的时候,核心Logger(包含嵌入式容器、hibernate、spring)会输出更多内容,但是你自己应用的日志并不会输出为DEBUG级别。
- 多彩输出
如果你的终端支持ANSI,设置彩色输出会让日志更具可读性。通过在application.properties中设置spring.output.ansi.enabled
参数来支持。
NEVER:禁用ANSI-colored输出(默认项)
DETECT:会检查终端是否支持ANSI,是的话就采用彩色输出(推荐项)
ALWAYS:总是使用ANSI-colored格式输出,若终端不支持的时候,会有很多干扰信息,不推荐使用 - 文件输出
Spring Boot默认配置只会输出到控制台,并不会记录到文件中,但是我们通常生产环境使用时都需要以文件方式记录。
若要增加文件输出,需要在application.properties中配置logging.file或logging.path属性。
logging.file,设置文件,可以是绝对路径,也可以是相对路径。如:logging.file=my.log
logging.path,设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:logging.path=../logs
日志文件会在10Mb大小的时候被截断,产生新的日志文件,默认级别为:ERROR、WARN、INFO - 级别控制
在Spring Boot中只需要在application.properties中进行配置完成日志记录的级别控制。
配置格式:logging.level.*=LEVEL
logging.level:日志级别控制前缀,*为包名或Logger名
LEVEL:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
举例:logging.level.com.test=DEBUG
:com.test包下所有class以DEBUG级别输出logging.level.root=WARN
:root日志以WARN级别输出 - 自定义输出格式
在Spring Boot中可以通过在application.properties配置如下参数控制输出格式:logging.pattern.console
:定义输出到控制台的样式(不支持JDK Logger)logging.pattern.file
:定义输出到文件的样式(不支持JDK Logger)
应用
logback是Spring Boot默认的日志系统,假如对日志没有特殊要求,可以完全零配置使用 SLF4J(Simple Logging Facade For Java)的logback来输出日志。
package com.jianeye.test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TestApplication {
private static Logger logger = LoggerFactory.getLogger(TestApplication.class);
public static void main(String[] args) {
logger.warn("logback --------------------------------\n");
SpringApplication.run(TestApplication.class, args);
logger.info("default log system *************************\n");
}
}
Spring Boot也支持自定义日志配置,有以下两种方式。
- 在 src/main/resources 下面创建logback.xml (根据不同环境来定义不同的日志输出,那么取名为logback-spring.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="INFO"/>
<logger name="org.springboot.sample" level="TRACE" />
<springProfile name="dev">
<logger name="org.springboot.sample" level="DEBUG" />
</springProfile>
<springProfile name="staging">
<logger name="org.springboot.sample" level="INFO" />
</springProfile>
</configuration>
- 使用最简单的方法,在 application 配置文件中配置。
logging:
config: classpath:logback-spring.xml
file: cuckoo3
path: /cuckoo3-log/logs
level:
com.jianeye.cuckoo3.webside: DEBUG
需要注意几点:
- 这里若不配置具体的包的日志级别,日志文件信息将为空
- 若只配置logging.path,那么将会在E:\logs文件夹生成一个日志文件为spring.log
- 若只配置logging.file,那将会在项目的当前路径下生成一个demo.log日志文件
- logging.path和logging.file同时配置,不会有在这个路径有E:\logs\demo.log日志生成,logging.path和logging.file不会进行叠加
- logging.path和logging.file的value都可以是相对路径或者绝对路径