后端——框架——容器框架——spring_boot——《官网》阅读笔记——第四章节1(集成日志框架)

  日志框架有很多类型,Spring boot支持三种log4j2,java.logging,logback。我在实际项目中使用logback居多,而且spring boot默认的日志框架也是logback,所以其他两种类型省略。

  不论是logback与spring boot集成,还是与spring集成,掌握logback框架的知识是核心点。

  单独使用logback时,只需要两个步骤

  1. 引入logback-core,logback-classic,slfj等jar包
  2. 编写配置文件,文件名可以是logback-test.xml,logback.xml,logback.groovy中的任意一个。

  具体的核心配置项,配置logger,配置Appender,配置Encoder。

  1. 配置logger:配置root logger,配置自定义logger
  2. 配置Appender:配置consoleAppender,配置FileAppender。
  3. 配置Encoder:配置日志信息的pattern。

  与Spring boot集成也是类似的。

1、配置Logger

  配置root logger和自定义logger,只需要在application.properties添加Logging.level.<logger-name>=<level>的配置项。

  root logger的配置

logging.level.root = info

  自定义logger的配置,例如包名是learn.springBoot

Logging.level.learn.springBoot = debug

  Spring boot在上述两种形式上添加了组的概念,可以将多个logger-name归为一组,从而统一定义它们的日志级别

# group
logging.group.test=learn.springBoot, learn.test
logging.level.test=debug

  上述例子中将learn.test,learn.springBoot归为一组,统一定义它们的日志级别

2、配置Appender

  最常使用的两种Appender是ConsoleAppender和FileAppender。

2.1  ConsoleAppender

  ConsoleAppender是spring boot的默认值。单独使用logback时,配置ConsoleAppender,需要配置它的三个属性,encoder,target,withJansi。

  1. Encoder:配置Console的日志格式,对应logging.pattern.console配置项。
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} %n

  2. Target:输出流,默认值是System.out。

  3. withJansi:不同级别的日志使用不同的颜色。无需配置此项,可以在IDE上安装LogViewer插件,然后可以配置插件,我觉得这种方式更简单。

2.2  FileAppender

  单独使用FileAppender时,通常配置的类型都是RollingFileAppender,TriggerPolicy和RollingPolicy通常都是使用的SizeAndTimeBasedRollingPolicy。

  它的配置项有以下几项:

  1. File:设置日志文件的名称,对应logging.file.name 或 logging.file.path配置项,name指定日志文件的名称; path指定日志文件存放的路径,此时日志文件的名称为spring.log。二者只配置一个
  2. Append:日志追加到文件末尾,而不是覆盖之前的内容,使用默认值即可
  3. immediateFlush:使用默认值true即可
  4. fileNamePattern:当触发生成新日志时,新日志文件的名称格式,对应logging.pattern.rolling-file-name
${file_root_app_history_dir}/%d{yyyy/MM,aux}/%d{yyyy-MM-dd}_log%i.zip

  5. maxSize:当日志文件超过此值时,触发生成新日志,对应logging.file.max-size

logging.file.max-size=5MB

  6.maxHistory:指定日志文件保留的最长时间值,单位由fileNamePattern决定,例如上述配置的日期单位为天。对应logging.file.max-history

logging.file.max-history=365

  7. totalSizeCap:指定日志文件的总大小,超出总大小时,会触发旧日志的删除。对应logging.file.total-size-cap

logging.file.total-size-cap=20G

  8. encoder:配置日志信息的格式,对应logging.pattern.file

logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} %logger %n[%thread] %7level: %message %n

  9.cleanHistoryOnStart:是否在logback启动时触发一次旧日志的删除,使用默认值即可,默认情况下由maxHistory,totalSizeCap触发即可。

3、杂项

3.1   loggingConfig

  从上述配置看,通过Spring boot去配置logback还是比较麻烦的,因为没有层次结构,当想指定为logback配置文件时,可以使用Logging.config配置项, 或者设置

  org.springframework.boot.logging.LoggingSystem属性值。

  它的值有三种类型

  1. 当为none时,关闭spring boot的日志功能
  2. 当为特定文件名称时,指定为特定的日志框架。
    • Logback:logback.xml,logback-spring.xml,logback.groovy,logback-spring.groovy
    • Log4j2:log4j2.xml,log4j2-spring.xml
    • JDK:logging.properties

  3. 当为自定义文件名称时,使用spring boot默认的日志框架,即logback。

  通常情况下不要使用logback.xml,这是因为logback日志框架本身也会自动加载此文件。

3.2   SpringProfile

  在日志框架的配置文件中扩展springProfile标签。当日志配置信息包裹在SpringProfile下时,只有满足标签的name属性,才会生效

<springProfile name="test">
	<root level="debug">
		<appender-ref ref="SYSOUT"></appender-ref>
	</root>
</springProfile>

  上述配置的含义是:当激活的profile中包含test时,root logger的日志级别设置为debug。

3.3   SpringProperty

  在日志框架的配置文件中扩展springProperty标签。功能是日志配置信息中可以引入spring boot的配置项

<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host" defaultValue="localhost"/> 

  其中

  1. Scope:日志框架变量的作用域
  2. Name:日志框架变量的名称
  3. Source:spring boot配置项的名称
  4. defaultValue:默认值

4、示例

# Logback configuration
debug=true
# Logger
# root Logger
logging.level.root=debug

# self define logger
logging.level.learn.springBoot=info

# group
logging.group.test=learn.springBoot, learn.test
logging.level.test=debug 

# Appender
# Console Appender
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} %logger %n[%thread] %7level: %message %n

# File Appender
app_name = learnSpringBoot
file_root_app_dir = H:\logs\${app_name}
file_root_app_history_dir =H:\logs\history

logging.file.path = ${file_root_app_dir}
logging.file.name = ${file_root_app_dir}\${app_name}_log.txt

logging.pattern.rolling-file-name=${file_root_app_history_dir}/%d{yyyy/MM,aux}/%d{yyyy-MM-dd}_log%i.zip
logging.file.max-size=5MB
logging.file.max-history=365
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} %logger %n[%thread] %7level: %message %n
原文地址:https://www.cnblogs.com/rain144576/p/12498463.html