springboot中使用日志slf4j和logback
引入坐标
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
编写测试类
// 传入的class 就是代表这个logger的class,在之后设置日志级别的时候有用
Logger logger = LoggerFactory.getLogger(Class)
// 级别由低到高
log.trace();
log.debug();
log.info();
log.warn();
log.error();
配置方式
application.properties方式
1. logging.level.+ 包路径 = 日志级别
// LoggerFactory.getLogger(Class) 里面传入的class 在包路径下,则该日志级别及以上都会被打印
// 注意和本身得类没有关系,是和 getlogger传入的类在哪个包下有关系
logging.level.com.meiya.level1=trace
2. logging.file
logging.path # 如果这两个都不指定的话,日志打印只会在控制台输出
先指定 logging.file = my.log 日志文件默认输出到当前项目下(日志是叠加的)
logging.path = /data/log 日志输出到 /data/log文件夹下,名称为spring.log
3. logging.pattern.console
logging.pattern.file # 输出到控制台和输出到文件的格式
springboot 默认配置
org.springframework.boot.logging.logback 包下 base.xml 文件包含了springboot 默认配置
// 读取defaults.xml
// default.xml 中定义了consule_log_pattern 和 file_log_pattern
<include resource="org/springframework/boot/logging/logback/defaults.xml">
// 读取控制台和文件配置信息,其中的xml都有各自默认的配置
<include resource="org/springframeword.boot/logging/logback/console-appender.xml">
<include resource="org/springframeword.boot/logging/logback/file-appender.xml">
自己实现配置文件
| 日志实现层 | 使用的配置文件名称 |
|---|---|
| Logback | logback-spring.xml logback-spring.groovy logback.xml logback.groovy |
| Log4j2 | log4j2-spring.xml log4j.xml |
| JDK | logging.properties |
自定义配置文件和application.properties 都有则用application.properties
logback.xml直接被logback识别
logback-spring.xmllogback不能识别,被springboot识别,转换完之后给logback用
spring高级特性
<springProfile name="">
// 里面的内容只有当前环境成立的时候才会执行
</springProfile>
实战模拟
实际开发中,logback都是配置为按时间和大小记录
实现一个满20M就开启一个新的log文件,日志文件存放在项目log文件夹下再按天建目录,里面是每天的日志量.总量打到50个日志就删除最老的.
同时还需要满足动态切换日志等级.日常情况下只打印 info 级别及以上日志.
模拟调试的时候把日志级别调整到debug级别.
logback-spring.xml 配置文件详解
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 在此未说明属性为非必须的,那就表示属性必须设置 -->
<!-- *****************最小配置文件结构介绍******************************* -->
<!--
<configuration>
<appender></appender> //存在1或多个,功能指定记录输出目的地
<root></root> //最多存在一个,根logger
<logger><logger> //存在1或多个,普通logger
</configuration>
-->
<!-- *************************各个标签详细介绍********************************** -->
<!-- debug(非必须)属性:true表示输出logback内部的日志信息(不影响配置和级别) ;
scan(非必须)属性:默认为false,true表示扫描配置文件的变化并自动重新配置,默认每隔1分钟扫描一次;
scanPeriod(非必须)属性:搭配scan属性使用,设置扫描的间隔时间
-->
<configuration debug="false" scan="true" scanPeriod="1 seconds">
<!-- 用于指定logger上下文名称,默认为default -->
<contextName>logback</contextName>
<property name="LOG_HOME" value="./logback" />
<!--
*****************************根据时间滚动 为滚动规则和条件的appender(最常用)***********************
-->
<!-- 该appender的功能:将记录信息以特定格式写到文件,当文件达到20MB时,创建以时间为特定规则新的 文件,之后的记录会写到新文件,
文件个数最多维持10个,文件达到10个 后删除旧的文件-->
<appender name="time_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- TimeBasedRollingPolicy实现了RollingPolicy与TriggeringPolicy,
因此只需要<rollingPolicy>标签,不需要<TriggeringPolicy>标签
<rollingPolicy>标签有两个子标签:<fileNamePattern>、<maxHistory>
<fileNamePattern>:用于指定文件名命名规则
<maxHistory>:保留文件的个数,超过了就删除创建时间最久的文件
-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/logs/aa.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<maxFileSize>1MB</maxFileSize> <!-- 日志文件过大会使的编辑器打开非常慢,因此设置日志最大50MB -->
<maxHistory>30</maxHistory> <!-- 保存30天 -->
<totalSizeCap>10GB</totalSizeCap> <!-- 总日志大小 -->
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} -%msg%n</pattern>
</encoder>
</appender>
// 写debug 的时候就会输出debug及以上的日志,如果改成info,也会自动刷新读取
<root level="debug">
<appender-ref ref="time_file" />
</root>
</configuration>
版权声明:本文为weixin_48420669原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。