0%

SpringBoot2.x(十一)Logback日志介绍和SpringBoot整合实战

本文将介绍新日志框架Logback以及SpringBoot如何整合Logback

文前分享一组挪威北极光:


新日志框架LogBack介绍

常用处理java的日志组件有 slf4j,log4j,logback,common-logging等。

logback介绍

基于Log4j基础上大量改良,不能单独使用,推荐配合日志框架SLF4J来使用。

Logback当前分成三个模块:logback-core,logback-classiclogback-access;logback-core是其它两个模块的基础模块

Logback的核心对象

Logger日志记录器
Appender:指定日志输出的目的地,目的地可以是控制台文件
Layout:日志布局 格式化日志信息的输出

log4j

我们使用 log4j时,通常在 classpath下增加一个 log4j.propertieslog4j会默认加载该文件复写框架默认的日志配置):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
===========log4j示例===========		
### 设置###
log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志到=D://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

### 输出ERROR 级别以上的日志到=D://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

log4j.properties转logback.xml

对应的,logback也需要日志配置,会默认加载 classpath下的 logback.xml

如果有 log4j.properties,可以通过在线转换工具直接转为 logback.xmlhttps://logback.qos.ch/translator/


SpringBoot2.x整合logback

官网介绍

SpringBoot2.0.1日志配置

Spring Boot使用Commons Logging进行所有内部日志记录,但保留底层日志实现。 为Java Util LoggingLog4J2Logback提供了默认配置。 在每种情况下,记录器都预先配置为使用控制台输出,并且还提供可选的文件输出

默认情况下,如果引入了 starter-xx依赖,则使用Logback进行日志记录。并且会指定适当的Logback路由,以确保依赖了Java Util Logging,Commons Logging,Log4J或SLF4J的依赖库都能正常工作。

格式化日志输出

SpringBoot提供的默认格式化输出如下

1
2
3
4
5
2014-03-05 10:57:51.112  INFO 45469 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/7.0.52
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms
2014-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2014-03-05 10:57:51.702 INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
  • 输出内容分别是:
    • 日期和时间:毫秒精度,易于排序
    • 日志级别:ERROR>WARN>INFO>DEBUG>TRACE
    • 进程ID
    • ----分隔符,用于区分实际日志消息的开始
    • 线程名称:括在方括号中(可能会截断控制台输出)
    • 记录器名称:这通常是源类名称(通常缩写)
    • 日志消息

Logback没有FATAL级别。 它被替换为ERROR

调整控制台输出日志为DEBUG级别

默认情况下,SpringBoot只会在控制台输出 INFO及以上级别(WARNERROR)的日志。如果你想输出 DEBUG级别的日志,可以通过以下两种方法:

  1. 在运行SpringBoot应用 jar包时指定 --debug参数:
1
java -jar myApp.jar --debug
  1. 或者在你的 application.properties中添加 debug=true

输出日志到文件中

SpringBoot默认只将日志输出到控制台,如果你想也将它输出到文件中那么你可以在 application.properties中设置 logging.file输出到指定的文件中或设置logging.path输出到指定的目录下(可以是相对目录也可以是绝对目录)。

logging.file=my.log则会输出到 classpath下, loggging.file=/var/log则会输出日志到/var/log目录下(自动生成文件)。

你还可以通过logging.file.max-size 指定当设置输出日志到指定目录下时,日志文件大小达到多少就轮询创建新的日志文件。

调整各系统日志级别

所有支持 logging的系统(框架)都可以在application.properties中设置一个不同的日志级别:

1
2
3
logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR

自定义日志系统配置文件

  • 指定日志系统和其配置文件名称

如果你的应用引入了 starter-xx依赖,SpringBoot默认会采用 logback日志系统,如果你想使用 log4jJava Util Logging则需要配置 org.springframework.boot.logging.LoggingSystem=Log4j2org.springframework.boot.logging.LoggingSystem =JDK

并且如果采用的 logback,则SpringBoot会默认加载 classpath下的logback-spring.xmllogback-spring.groovylogback.xmllogback.groovy作为它的配置文件;如果采用的 log4j2则默认加载 log4j2-spring.xmllog4j2.xml ;如果采用的 JDK,则默认加载 logging.properties

  • logback-spring.xml举例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>

<!-- ConsoleAppender-输出到控制台 -->
<appender name="consoleApp" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
</pattern>
</layout>
</appender>

<!-- RollingFileAppender-输出到文件,滚动策略:每过一段时间则新建文件保存输出日志 -->
<appender name="fileInfoApp" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 只输出INFO、WARN级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>
%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
</pattern>
</encoder>
<!-- 滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 路径 -->
<fileNamePattern>app_log/log/app.info.%d.log</fileNamePattern>
</rollingPolicy>
</appender>

<appender name="fileErrorApp" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 只输出ERROR级别的日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>
%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
</pattern>
</encoder>

<!-- 设置滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 路径 -->
<fileNamePattern>app_log/log/app.err.%d.log</fileNamePattern>
<!-- 控制保留的归档文件的最大数量,超出数量就删除旧文件,假设设置每个月滚动,
且<maxHistory> 是1,则只保存最近1个月的文件,删除之前的旧文件 -->
<MaxHistory>1</MaxHistory>

</rollingPolicy>
</appender>
<!-- 设置日志级别为INFO,输出到三个地方 -->
<root level="INFO">
<appender-ref ref="consoleApp"/>
<appender-ref ref="fileInfoApp"/>
<appender-ref ref="fileErrorApp"/>
</root>
</configuration>
  • 个性化设置
Spring Environment System Property Comments
logging.exception-conversion-word LOG_EXCEPTION_CONVERSION_WORD The conversion word used when logging exceptions.
logging.file LOG_FILE If defined, it is used in the default log configuration.
logging.file.max-size LOG_FILE_MAX_SIZE Maximum log file size (if LOG_FILE enabled). (Only supported with the default Logback setup.)
logging.file.max-history LOG_FILE_MAX_HISTORY Maximum number of archive log files to keep (if LOG_FILE enabled). (Only supported with the default Logback setup.)
logging.path LOG_PATH If defined, it is used in the default log configuration.
logging.pattern.console CONSOLE_LOG_PATTERN The log pattern to use on the console (stdout). (Only supported with the default Logback setup.)
logging.pattern.dateformat LOG_DATEFORMAT_PATTERN Appender pattern for log date format. (Only supported with the default Logback setup.)
logging.pattern.file FILE_LOG_PATTERN The log pattern to use in a file (if LOG_FILE is enabled). (Only supported with the default Logback setup.)
logging.pattern.level LOG_LEVEL_PATTERN The format to use when rendering the log level (default %5p). (Only supported with the default Logback setup.)
PID PID The current process ID (discovered if possible and when not already defined as an OS environment variable).
鼓励一下~