Logback
是log4j
框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J
。
默认情况下,Spring Boot
会用Logback
来记录日志,并用INFO
级别输出到控制台。
1. 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
但是,其实是不需要引入该依赖的,因为你会发现spring-boot-starter其中包含了 spring-boot-starter-logging,具体看下图
2. 增加配置 -(方式一 application.yml)
org.springframework.boot.logging.logback
包下提供了默认的logback配置文件base.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Base logback configuration provided for compatibility with Spring Boot 1.1
-->
<included>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</included>
所以springBoot
支持在application.properties
或application.yml
中配置logging相关属性,简单配置如下
# 系统相关配置
server:
port: 8082
connection-timeout: 30000
servlet:
context-path: /
# 自定义
project: springboot-logback
pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level [%thread] %c [%L] -| %msg%n"
path: D:\logs\logback\
# 日志相关配置
logging:
level:
com.springboot.my: info
pattern:
console: ${pattern}
file: ${pattern}
path: ${path}
file: ${path}\${project}-app.log
经过验证,日志打印正常
logback日志
3. 增加配置 -(方式二 logback.yml)
- 注释掉
application.yml
中有关log相关的配置
# 系统相关配置
server:
port: 8082
connection-timeout: 30000
servlet:
context-path: /
# 自定义
#project: springboot-logback
#pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level [%thread] %c [%L] -| %msg%n"
#path: D:\logs\logback\
#
## 日志相关配置
#logging:
# level:
# com.springboot.my: info
# pattern:
# console: ${pattern}
# file: ${pattern}
# path: ${path}
# file: ${path}\${project}-app.log
- resource目录下增加
logback.xml
,具体配置如下
<!--
scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration debug="false" scan="true" scanPeriod="60 seconds" packagingData="true">
<!--
property:用来定义变量值的标签,<property> 有两个属性,name和value。通过<property>定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。
例如使用<property>定义上下文名称,然后在<contentName>设置logger上下文时使用。
-->
<property name="contextName" value="springboot-lb" />
<!--
contextName:每个logger都关联到logger上下文,默认上下文名称为“default”。
但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。
-->
<contextName>${contextName}</contextName>
<!-- ******************** appender:日志目的地 start ******************** -->
<!-- 标准输出:console -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoder 默认配置为PatternLayoutEncoder -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level [%thread] %c [%L] -| %msg%n</pattern>
</encoder>
</appender>
<!-- 文件输出:file -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--<file></file>-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>D:\logs\logback\${contextName}-%d{yyyyMMdd}.log</FileNamePattern>
</rollingPolicy>
<encoder>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level [%thread] %c [%L] -| %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<!--
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
-->
</appender>
<!-- ******************** appender:日志目的地 end ******************** -->
<!-- ******************** root:定义日志的level、appender,且最多只能配置一个 start ******************** -->
<!--TRACE < DEBUG < INFO < WARN < ERROR-->
<root>
<level value="INFO" />
<appender-ref ref="file" />
<appender-ref ref="console" />
</root>
<!-- ******************** root:定义日志的level、appender,且最多只能配置一个 end ******************** -->
<!-- ******************** logger:精确配置package或class的level、appender,可以配置0个或多个 end ******************** -->
<!--
level:日志级别(logger中的level会覆盖root中的,即以logger中为准,不管是否向上传递)
name:包名 或 类的全路径
addtivity:日志信息是否向上(root)传递
-->
<!-- 包名 -->
<logger name="com.springboot.my" />
<!-- 类的全路径 -->
<logger name="com.springboot.my.SpringBootLogbackApplication" level="warn" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</logger>
<!-- ******************** logger:精确配置package或class日志的level、appender end ******************** -->
</configuration>
-
项目启动验证,日志输出正常
logback日志文件输出
网友评论