学习logback配置并测试,实现按日期、大小分割日志文件

本文记录了学习Logback配置的过程,从无到有,逐步实现控制台输出和日志文件的创建。内容包括配置空文件、控制台输出不同级别日志、将日志写入文件并按日期和大小进行分割。同时强调了appender在root元素下及位置的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于本文是边学习边实践,比较啰嗦,想拿来就用的同学移步:https://blog.youkuaiyun.com/w_jiayou/article/details/106943376
之前只是把现成的xml文件拿来用,想要调整日志很费劲,今天从头开始边学习边测试
一、空的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration  scan="true" scanPeriod="10 seconds" debug="true">
	
</configuration>

既然决定要好好整理一下,就从什么都没有开始配置,启动项目:

com.springboot.demo02020623.Demo02020623Application
Connected to the target VM, address: '127.0.0.1:58330', transport: 'socket'
09:30:48,100 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Will scan for changes in [file:/D:/workspace/idea-workspace/demo02020623/target/classes/logbackConfig.xml] 
09:30:48,203 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Setting ReconfigureOnChangeTask scanning period to 10 seconds
09:30:48,222 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
09:30:48,223 |-INFO in org.springframework.boot.logging.logback.SpringBootJoranConfigurator@1869fbd2 - Registering current configuration as safe fallback point
09:30:48,230 |-WARN in Logger[org.springframework.boot.context.logging.ClasspathLoggingApplicationListener] - No appenders present in context [default] for logger [org.springframework.boot.context.logging.ClasspathLoggingApplicationListener].

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.1.RELEASE)

 _ _   |_  _ _|_. ___ _ |    _ 
| | |\/|_)(_| | |_\  |_)||_|_\ 
     /               |         
                        3.3.1.tmp 

除了一点打印出logback内部日志信息,啥都没有;

二、控制台输出

在xml配置中configuration标签下加入

	<logger name="com.springboot.demo02020623.mapper" level="TRACE" />
<!--    <logger name="com.springboot.demo02020623.controller" level="TRACE" />-->
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>

    <!-- Console 输出设置 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
logger:用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。<logger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。
        name:用来指定受此loger约束的某一个包或者具体的某一个类。
        level:用来设置打印级别,大小写无关:
              TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
              还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
              如果未设置此属性,那么当前loger将会继承上级的级别。
        addtivity:是否向上级loger传递打印信息。默认是true。
appender:定义控制台输出内容
	%d{HH:mm:ss.SSS}	当前时间,并格式化
	[%thread]						线程
	%-5level						日志等级,从左显示5个字符宽度
	%logger{36}				日志出处(哪个个class)
	%msg							日志内容
	%n								换行符
root:设置打印log日志等级,例如:这里没有设置controller的打印日志等级,则controller的等级跟随root的等级,如下图:

controller:

	@RequestMapping("/queryUsers1")
    public Object queryUsers1(){
        logger.info("controller==============info==============");
        logger.warn("controller==============warn==============");
        logger.error("controller==============error==============");
        logger.trace("controller==============trace==============");
        logger.debug("controller==============debug==============");
        return iDmUsersService.selectDemo(null);
    }

设置root的level=“TRACE”:

15:25:47.373 [http-nio-80-exec-1] INFO  c.s.d.controller.DmUsersController - controller==============info==============
15:25:47.373 [http-nio-80-exec-1] WARN  c.s.d.controller.DmUsersController - controller==============warn==============
15:25:47.373 [http-nio-80-exec-1] ERROR c.s.d.controller.DmUsersController - controller==============error==============
15:25:47.373 [http-nio-80-exec-1] TRACE c.s.d.controller.DmUsersController - controller==============trace==============
15:25:47.373 [http-nio-80-exec-1] DEBUG c.s.d.controller.DmUsersController - controller==============debug==============

设置root的level=“INFO”:

15:30:34.835 [http-nio-80-exec-3] INFO  c.s.d.controller.DmUsersController - controller==============info==============
15:30:34.835 [http-nio-80-exec-3] WARN  c.s.d.controller.DmUsersController - controller==============warn==============
15:30:34.835 [http-nio-80-exec-3] ERROR c.s.d.controller.DmUsersController - controller==============error==============

但是如果设置了<logger name="com.springboot.demo02020623.controller" level="TRACE" />,不管root的level是什么,都会打印:

15:31:28.731 [http-nio-80-exec-4] INFO  c.s.d.controller.DmUsersController - controller==============info==============
15:31:28.731 [http-nio-80-exec-4] WARN  c.s.d.controller.DmUsersController - controller==============warn==============
15:31:28.731 [http-nio-80-exec-4] ERROR c.s.d.controller.DmUsersController - controller==============error==============
15:31:28.731 [http-nio-80-exec-4] TRACE c.s.d.controller.DmUsersController - controller==============trace==============
15:31:28.731 [http-nio-80-exec-4] DEBUG c.s.d.controller.DmUsersController - controller==============debug==============

至此控制台打印输出的基本功能已经实现了,但是项目上线之后我们还想通过日志查看项目的运行情况,这个时候就需要将日志保存到log文件中了。

三、输出日志到log文件

在xml配置中configuration标签下继续加入:

<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
    <property name="LOG_HOME" value="D:/log/logback"/>
    <property name="project_name" value="demo02020623"/>
    
 <!-- INFO日志 appender  -->
    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${project_name}/INFO.log</file> <!-- 日志名称 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${project_name}/INFO.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
             <!-- 如果日志大小超出限制,会将旧的日志打包并生成新的日志文件,其中%i代表同名文件的序列号 -->
            <maxFileSize>20MB</maxFileSize>  <!-- 日志最大尺寸,日志文件过大会使的编辑器打开非常慢 -->
            <maxHistory>30</maxHistory>  <!-- 保存30天 -->
            <totalSizeCap>10GB</totalSizeCap>  <!-- 总日志大小 -->
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!-- 日志过滤器 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 只打印INFO日志 -->
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

用最大限制为2k测试了一下,没有问题:
在这里插入图片描述
其他等级的日志同理。

四、总结(个人观点):
父标签:	configuration
子标签:	property => 用来定义变量
		logger=> 设置某一个包或者具体的某一个类的日志打印级别
		property => 用来定义日志输出的方式、各种参数
		root=> 设置总体日志打印级别,打印哪些property 

至此已足够基本使用了。

注意:appender必须放入root属性下,否则不生效,并且root属性要放在所有appender的下方,否则会找不到appender。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值