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来访问日志的功能。

  1. logback-core: Joran, Status, context, pattern parsing
  2. logback-classic: developer logging
  3. logback-access: The log generated when a user accesses a web-page on a web server. Integrates seamlessly with Jetty and Tomcat.

选择logback的理由:

  1. logback比log4j要快大约10倍,而且消耗更少的内存。
  2. logback-classic模块直接实现了SLF4J的接口,所以我们迁移到logback几乎是零开销的。
  3. logback不仅支持xml格式的配置文件,还支持groovy格式的配置文件。相比之下,Groovy风格的配置文件更加直观,简洁。
  4. logback-classic能够检测到配置文件的更新,并且自动重新加载配置文件。
  5. logback能够优雅的从I/O异常中恢复,从而我们不用重新启动应用程序来恢复logger。
  6. logback能够根据配置文件中设置的上限值,自动删除旧的日志文件。
  7. logback能够自动压缩日志文件。
  8. logback能够在配置文件中加入条件判断(if-then-else)。可以避免不同的开发环境(dev、test、uat…)的配置文件的重复。
  9. logback带来更多的filter。
  10. logback的stack trace中会包含详细的包信息。
  11. 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来输出日志。

  1. package com.jianeye.test;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import org.springframework.boot.SpringApplication;
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;
  6. @SpringBootApplication
  7. public class TestApplication {
  8. private static Logger logger = LoggerFactory.getLogger(TestApplication.class);
  9. public static void main(String[] args) {
  10. logger.warn("logback --------------------------------\n");
  11. SpringApplication.run(TestApplication.class, args);
  12. logger.info("default log system *************************\n");
  13. }
  14. }

Spring Boot也支持自定义日志配置,有以下两种方式。

  1. 在 src/main/resources 下面创建logback.xml (根据不同环境来定义不同的日志输出,那么取名为logback-spring.xml 即可)文件,并按需求进行配置。

logback-spring.xml 文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <include resource="org/springframework/boot/logging/logback/base.xml" />
  4. <logger name="org.springframework.web" level="INFO"/>
  5. <logger name="org.springboot.sample" level="TRACE" />
  6. <springProfile name="dev">
  7. <logger name="org.springboot.sample" level="DEBUG" />
  8. </springProfile>
  9. <springProfile name="staging">
  10. <logger name="org.springboot.sample" level="INFO" />
  11. </springProfile>
  12. </configuration>
  1. 使用最简单的方法,在 application 配置文件中配置。
  1. logging:
  2. config: classpath:logback-spring.xml
  3. file: cuckoo3
  4. path: /cuckoo3-log/logs
  5. level:
  6. com.jianeye.cuckoo3.webside: DEBUG

需要注意几点:

  1. 这里若不配置具体的包的日志级别,日志文件信息将为空
  2. 若只配置logging.path,那么将会在E:\logs文件夹生成一个日志文件为spring.log
  3. 若只配置logging.file,那将会在项目的当前路径下生成一个demo.log日志文件
  4. logging.path和logging.file同时配置,不会有在这个路径有E:\logs\demo.log日志生成,logging.path和logging.file不会进行叠加
  5. logging.path和logging.file的value都可以是相对路径或者绝对路径