Spring Boot Logging 配置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot Logging 配置相关的知识,希望对你有一定的参考价值。
参考技术ASpring Boot 能够使用Logback, Log4J2 , java util logging 作为日志记录工具。Spring Boot 默认使用Logback作为日志记录工具。日志默认输出到控制台但也能输出到文件中。我们通过spring-boot-starter-logging 加入Logback依赖,其实只要我们加入任意的Spring Boot starter 都会默认引入spring-boot-starter-logging,因此 我们不需要分开加入他们。
logging.level.* : 作为package(包)的前缀来设置日志级别。
logging.file : 配置日志输出的文件名,也可以配置文件名的绝对路径。
logging.path : 配置日志的路径。如果没有配置 logging.file ,Spring Boot 将默认使用spring.log作为文件名。
logging.pattern.console : 定义console中logging的样式。
logging.pattern.file : 定义文件中日志的样式。
logging.pattern.level : 定义渲染不同级别日志的格式。默认是%5p.
logging.exception-conversion-word : .定义当日志发生异常时的转换字
PID : 定义当前进程的ID
下面将讨论在 application.properties , application.ym , Logback XML 中配置Logback以及在Spirng Boot 应用中使用Log4J2.
logging.level设置日志级别。我们可以使用TARCE , DEBUG , INFO , WARN , ERROR , FATAL , OFF 。可以使用root级别和package级别来控制日志的输入级别。创建一个具有以下依赖关系的应用程序。
使用 src\\main\\resources\\application.properties 配置日志级别
使用 src\\main\\resources\\application.yml
Spring Boot 默认把日志输入到console,如果我们要把日志输入到文件中,需要配置logging.file 或者logging.path属性性。logging.file属性用来定义文件名。他不仅仅可以配置文件名,也可以路径+文件名。
在这种情况下mylogfile.log将在根目录中创建。我们也可以为为mylogfile.log分配一个路径,如concretepage/mylogfile.log。这种情况下我们将在相对根目录下创建concretepage/mylogfile.log。我们也可以为日志文件配置绝对路径。
application.yml 中配置
配置logging.path或者logging.path属性将日志输出到文件夹中。logging.path属性用来定义日志文件路径
在 application.properties 中配置logging.path属性
将会相对根路径下创建concretepage/logs/spring.log ,也可以配置绝对路径
application.yml 配置
通过设置logging.patter.console属性我们能改变输出到console的日志样式。日志样式包括时间,日志级别,线程名,日志名以及消息。我们可以按我们的喜好改变日志样式。
application.properties
application.yml
改变文件中的日志样式我们需要设置logging.pattern.file属性。首先通过logging.file或logging.path属性,把日志记录到文件中。
通过logging.path属性将在根目录下创建concretepage/logs并默认使用spring.log作为文件名。logging.pattern.console是设置console的日志样式
application.yml
通过命令行改变日志的输出级别
Sping Boot 默认输出ERROR , WARN , INFO 级别的日志。我们可以通过命令行使能DEBUG ,TRACE级别的日志输出,效果是跟配置文件一样的。想象我们有一个名为my-app.jar的可执行的JAR包我们可以在启动应用是使能DEBUG级别日志输出。
在application.properties中配置
application.yml
相同的方式使能TRACE级别的日志
application.properties
application.yml
在应用程序中记录日志
创建一个SLF4J的例子,首先获得org.slf4j.Logger的实例。
在application.properties配置包com.concretepage日志记录级别
输出
使用Logback XML 文件
Sping Boot中默认使用logback, 我们可以在application.properties或者application.yml中设置日志级别。如果想使用XML配置Logback,我们需要在类路径下创建logback-spring.xml文件
src\\main\\resources\\logback-spring.xml
使用自定义日志:Log4J2
我们使用任何的starter,默认加入Logback 依赖spring-boot-starter-logging。为了使用Log4J2,我们首先要去除spring-boot-starter-logging并且引入spring-boot-starter-log4j2 依赖
现在我们可以在类路径下创建并配置log4j2-spring.xml
原文: http://www.concretepage.com/spring-boot/spring-boot-logging-example
Spring boot logging
Spring boot logging
文章目录
源码
源码链接 https://gitee.com/mayun_xiaodu/spring-boot-all
上一节 Spring boot 配置文件读取和yaml结构
首先我们搭一个web工程,集成spring-boot-starter-web;spring-boot-starter-web中依赖了spring-boot-starter-logging;
启动springboot
springboot 启动日志
springboot 提供的默认输出日志
. ____ _ __ _ _
/\\\\ / ___'_ __ _ _(_)_ __ __ _ \\ \\ \\ \\
( ( )\\___ | '_ | '_| | '_ \\/ _` | \\ \\ \\ \\
\\\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.6.RELEASE)
2021-03-29 09:55:06.451 INFO 80640 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2021-03-29 09:55:06.473 INFO 80640 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2021-03-29 09:55:06.473 INFO 80640 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.21]
2021-03-29 09:55:06.566 INFO 80640 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2021-03-29 09:55:06.566 INFO 80640 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1249 ms
2021-03-29 09:55:06.753 INFO 80640 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2021-03-29 09:55:06.882 INFO 80640 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
自定义logging
(这里使用 slf4j + logback 进行示例)
1.配置文件中设置日志参数
logging:
level:
root: info # 配置root 的级别
com.xiaodu.springboot.logging: warn # 配置具体包下的日志级别
file:
max-size: 10KB
max-history: 7
path: logging-logs
pattern:
## %d日期格式 %level 日志级别 %t 线程 %loggerlength logger名 %m 日志内容 %L 日志输出的行数, %n 换行;
console: '%dyyyy-MM-dd HH:mm:ss.SSS [%level] [%15t] %logger20 => %m Line: %L%n'
代码中输出日志
// 进行日志输出
log.trace("trace => ", "springboot-logging");
log.debug("debug => ", "springbooot-logging");
log.info("info => ", "springboot-logging");
log.warn("warn => ", "springboot-logging");
log.error("error => ", "springboot-logging");
在配置文件中设置了日志的root 为info级别, com.xiaodu.springboot.logging 包下的logger为warn级别;日志文件最大10KB, 保存7天;存放路径为 loggin-logs目录下;并自定义了日志输出的console格式
启动程序
. ____ _ __ _ _
/\\\\ / ___'_ __ _ _(_)_ __ __ _ \\ \\ \\ \\
( ( )\\___ | '_ | '_| | '_ \\/ _` | \\ \\ \\ \\
\\\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.6.RELEASE)
2021-03-29 11:15:52.700 [INFO] [ main] o.s.b.w.e.t.TomcatWebServer => Tomcat initialized with port(s): 8080 (http) Line: 90
2021-03-29 11:15:52.719 [INFO] [ main] o.a.c.c.StandardService => Starting service [Tomcat] Line: 173
2021-03-29 11:15:52.719 [INFO] [ main] o.a.c.c.StandardEngine => Starting Servlet engine: [Apache Tomcat/9.0.21] Line: 173
2021-03-29 11:15:52.799 [INFO] [ main] o.a.c.c.C.[.[.[/] => Initializing Spring embedded WebApplicationContext Line: 173
2021-03-29 11:15:52.799 [INFO] [ main] o.s.w.c.ContextLoader => Root WebApplicationContext: initialization completed in 1360 ms Line: 283
2021-03-29 11:15:52.938 [INFO] [ main] o.s.s.c.ThreadPoolTaskExecutor => Initializing ExecutorService 'applicationTaskExecutor' Line: 171
2021-03-29 11:15:53.069 [INFO] [ main] o.s.b.w.e.t.TomcatWebServer => Tomcat started on port(s): 8080 (http) with context path '' Line: 202
2021-03-29 11:15:53.072 [WARN] [ main] c.x.s.l.LoggingApplication => warn => springboot-logging Line: 28
2021-03-29 11:15:53.074 [ERROR] [ main] c.x.s.l.LoggingApplication => error => springboot-logging Line: 29
2.使用日志文件配置logging
resources 下创建 logback.xml
具体的java 日志规范这里不再阐述。
创建一个简单的logback.xml; 配置了 root, logger, layout, appender
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<property name="APP_NAME" value = "springboot-logging-test"/>
<!--输出到控制台-->
<appender name = "console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>$APP_NAME -- %dyyyy-MM-dd HH:mm:ss.SSS [%level] [%15t] %logger20 => %m Line: %L%n</pattern>
</encoder>
</appender>
<!--输出到文件-->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>springboot-log-test/$APP_NAME_stdout.log</File>
<!-- 配置文件滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 滚动生成的文件名称-->
<FileNamePattern>springboot-log-test/$APP_NAME_stdout.%dyyyy-MM-dd-%i.log</FileNamePattern>
<!-- 最大保存7天的日志 -->
<maxHistory>7</maxHistory>
<!-- 日志文件超过5kb后,生成一个新的文件记录日志-->
<MaxFileSize>5KB</MaxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>$APP_NAME -- %dyyyy-MM-dd HH:mm:ss.SSS [%level] [%15t] %logger20 => %m Line: %L%n</pattern>
</encoder>
</appender>
<logger name ="com.xiaodu.springboot.logging">
<level value = "debug"/>
</logger>
<root>
<level value="info"/>
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
</configuration>
以上配置后我们打印的日志
springboot-logging-test -- 2021-03-29 12:07:54.944 [DEBUG] [ main] c.x.s.l.LoggingApplication => Running with Spring Boot v2.1.6.RELEASE, Spring v5.1.8.RELEASE Line: 53
springboot-logging-test -- 2021-03-29 12:07:54.945 [INFO] [ main] c.x.s.l.LoggingApplication => No active profile set, falling back to default profiles: default Line: 646
springboot-logging-test -- 2021-03-29 12:07:56.164 [INFO] [ main] o.s.b.w.e.t.TomcatWebServer => Tomcat initialized with port(s): 8080 (http) Line: 90
springboot-logging-test -- 2021-03-29 12:07:56.223 [INFO] [ main] o.a.c.h.Http11NioProtocol => Initializing ProtocolHandler ["http-nio-8080"] Line: 173
springboot-logging-test -- 2021-03-29 12:07:56.229 [INFO] [ main] o.a.c.c.StandardService => Starting service [Tomcat] Line: 173
springboot-logging-test -- 2021-03-29 12:07:56.229 [INFO] [ main] o.a.c.c.StandardEngine => Starting Servlet engine: [Apache Tomcat/9.0.21] Line: 173
springboot-logging-test -- 2021-03-29 12:07:56.299 [INFO] [ main] o.a.c.c.C.[.[.[/] => Initializing Spring embedded WebApplicationContext Line: 173
springboot-logging-test -- 2021-03-29 12:07:56.299 [INFO] [ main] o.s.w.c.ContextLoader => Root WebApplicationContext: initialization completed in 1289 ms Line: 283
springboot-logging-test -- 2021-03-29 12:07:56.461 [INFO] [ main] o.s.s.c.ThreadPoolTaskExecutor => Initializing ExecutorService 'applicationTaskExecutor' Line: 171
springboot-logging-test -- 2021-03-29 12:07:56.561 [INFO] [ main] o.a.c.h.Http11NioProtocol => Starting ProtocolHandler ["http-nio-8080"] Line: 173
springboot-logging-test -- 2021-03-29 12:07:56.582 [INFO] [ main] o.s.b.w.e.t.TomcatWebServer => Tomcat started on port(s): 8080 (http) with context path '' Line: 202
springboot-logging-test -- 2021-03-29 12:07:56.584 [INFO] [ main] c.x.s.l.LoggingApplication => Started LoggingApplication in 1.972 seconds (JVM running for 2.929) Line: 59
springboot-logging-test -- 2021-03-29 12:07:56.586 [DEBUG] [ main] c.x.s.l.LoggingApplication => debug => springbooot-logging Line: 26
springboot-logging-test -- 2021-03-29 12:07:56.586 [INFO] [ main] c.x.s.l.LoggingApplication => info => springboot-logging Line: 27
springboot-logging-test -- 2021-03-29 12:07:56.587 [WARN] [ main] c.x.s.l.LoggingApplication => warn => springboot-logging Line: 28
springboot-logging-test -- 2021-03-29 12:07:56.587 [ERROR] [ main] c.x.s.l.LoggingApplication => error => springboot-logging Line: 29
日志文件保存路径
也可以直接生成压缩包, 修改文件后缀即可
<FileNamePattern>springboot-log-test/$APP_NAME_stdout.%dyyyy-MM-dd-%i.log.gz</FileNamePattern>
springboot 对logback中的扩展支持
resources 下创建 logback-spring.xml
(springboot 优先加载 “logback-test.groovy”, “logback-test.xml”,
“logback.groovy”, “logback.xml”, 若classpath下没有发现以上文件,则加载
“logback-test-spring.groovy”, “logback-test-spring.xml”,
“logback-spring.groovy”, “logback-spring.xml” 日志配置文件)
我们现在使用logback-spring.xml, 然后 把 logback.xml 临时改下名称 logback-temp.xml或者删除也可以
logback-spring.xml
spring 特有的日志标签
- springProperty 获取spring配置信息
- springProfile 根据spring.profile.active 进行不同的环境使用不同的日志配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--获取spirng配置信息-->
<springProperty name = "AAA" source = "spring.application.name"/>
<appender name = "console" class = "ch.qos.logback.core.ConsoleAppender">
<Target>System.out</Target>
<encoder>
<pattern>$AAA%dyyyy-MM-dd HH:mm:ss.SSS [%level] [%t] %c20 => %m%n</pattern>
</encoder>
</appender>
<!--根据spring.profiles.active 指定环境 使用不同logger进行不同环境中的不同级别日志打印-->
<springProfile name = "dev | test">
<logger name = "com.xiaodu.springboot.logging">
<level value = "debug"/>
</logger>
</springProfile>
<springProfile name = "prod">
<logger name = "com.xiaodu.springboot.logging">
<level value = "warn"/>
</logger>
</springProfile>
<root>
<level value="info"/>
<appender-ref ref="console"/>
</root>
</configuration>
上述是一个简单的日志配置文件; springboot 提供了 springProperty 属性进行获取环境配置信息,
springprofile 进行获取 spring.profiles.active信息;根据不同的开发,测试,生成环境进行不同的日志输出
控制台日志颜色输出
logback 自带的日志显示
%color(日志内容) 表示
示例:
- %red(%t)
- %blue(%logger)
…
完整示例
<pattern>%magenta($AAA) – %dyyyy-MM-dd HH:mm:ss.SSS %red([%5level]) %blue([%10t]) %cyan(%40logger39) : %yellow(%m) %n</pattern>
springboot 提供的 %clr
格式: %clr(日志内容)color; 不指定color时可以根据日志的级别自动显示颜色
springboot 提供了日志颜色转换器,ColorConverter
<!-- 日志颜色转换器 -->
<conversionRule conversionWord="clr" Spring boot logging
如何在spring-boot可执行jar文件中配置java logging.properties
spring boot、logback 和 logging.config 属性
当 logging.config 指向 logfj2 外部配置文件的错误文件位置时,spring-boot 应用程序停止