SpringBoot配置Logback 日志按时间和大小分割失效问题

SpringBoot配置Logback 日志不按时间和按大小分割。这个问题困扰我好几天,没时间去找原因,今天抽时间去官网简单浏览了一下,没想到找到了解决方案,或者说之前我的配置是错误的。

先把我之前的配置贴一下,我这种方案也是网上很多项目使用的,但是我去logback官网查看了简单的教程,里面并没有这种搭配。

<!-- 按照每天生成日志文件 -->
    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/${AppName}.%d{yyyy-MM-dd_HH-mm}.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
        </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>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender> 

TimeBasedRollingPolicy这种策略代表按时间分割日志文件,官网都是单独使用,没和别的策略搭配,具体搭配策略需要测试一下啦。

SizeBasedTriggeringPolicy这种策略代表按尺寸分割日志文件,官网提供搭配的策略FixedWindowRollingPolicy,详细的请直接官网。

我在官方发现的解决问题方法。

Size and time based rolling policy
Sometimes you may wish to archive files essentially by date but at the same time limit the size of each log file, in particular if post-processing tools impose size limits on the log files. In order to address this requirement, logback ships with SizeAndTimeBasedRollingPolicy.

Note that TimeBasedRollingPolicy already allows limiting the combined size of archived log files. If you only wish to limit the combined size of log archives, then TimeBasedRollingPolicy described above and setting the totalSizeCap property should be amply sufficent.

Here is a sample configuration file demonstrating time and size based log file archiving.

Example: Sample configuration for SizeAndTimeBasedFNATP (logback-examples/src/main/resources/chapters/appenders/conf/logback-sizeAndTime.xml)

啥意思呢?就是说有时候啊您可能希望按日期对文件进行保存,但同时限制每个日志文件的大小,特别是如果处理工具对日志文件大小有限制的话。为了满足这个需求,使用SizeAndTimeBasedRollingPolicy来解决。如下官方提供的例子。

<configuration>
  <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>mylog.txt</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
       <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
       <maxFileSize>100MB</maxFileSize>    
       <maxHistory>60</maxHistory>
       <totalSizeCap>20GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
  </appender>
 
 
  <root level="DEBUG">
    <appender-ref ref="ROLLING" />
  </root>
 
</configuration>

Both the %i and %d tokens are mandatory. 这里需要注意日志文件中的%d、%i是不可或缺的。
个人配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
	<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
	<property name="LOG_HOME" value="./logs" />
	<property name="AppName" value="daxiangpark" />
	<!-- 控制台输出 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<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>
	</appender>
	<!-- 设置分割 -->
	<appender name="FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 设置按尺寸和时间(同时满足)分割 -->
		<rollingPolicy
			class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<!-- rollover daily -->
			<fileNamePattern>${LOG_HOME}/${AppName}.%d{yyyy-MM-dd}.%i.log
			</fileNamePattern>
			<!-- each file should be at most 10MB, keep 30 days worth of history, 
				but at most 3GB -->
			<maxFileSize>10MB</maxFileSize>
			<maxHistory>30</maxHistory>
			<totalSizeCap>3GB</totalSizeCap>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
		</encoder>
	</appender>
	<!-- 日志输出级别 -->
	<root level="INFO">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="FILE" />
	</root>
</configuration> 

到此,搞定了。告诫自己,知行合一,自己看到前人总结的,自己必须亲自实践过了,才能体会知。动手动手,自己知道动手能提升技能,但是你不行动,你怎么知道动手能提升技能,一点感悟分享给我和大家。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Spring Boot可以使用Logback作为默认的日志框架。下面是配置Logback的步骤: 1. 在pom.xml文件中添加logback依赖: ``` <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> ``` 2. 在src/main/resources目录下创建logback.xml文件,配置Logback日志输出格式和输出目标。例如: ``` <?xml version="1." encoding="UTF-8"?> <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="CONSOLE" /> </root> </configuration> ``` 这个配置文件定义了一个名为CONSOLE的输出目标,输出格式为时间、线程、日志级别、日志名称和日志内容。同时,将日志级别设置为INFO,只输出INFO级别及以上的日志。 3. 在Spring Boot的配置文件application.properties或application.yml中,添加以下配置: ``` logging.config=classpath:logback.xml ``` 这个配置告诉Spring Boot使用logback.xml作为日志配置文件。 以上就是配置Logback的步骤。配置完成后,可以使用Spring Boot提供的日志API进行日志输出,例如: ``` import org.slf4j.Logger; import org.slf4j.LoggerFactory; @RestController public class MyController { private static final Logger logger = LoggerFactory.getLogger(MyController.class); @GetMapping("/hello") public String hello() { logger.info("Hello, world!"); return "Hello, world!"; } } ``` 这个例子中,使用了SLF4J的Logger接口进行日志输出,日志级别为INFO。输出的日志将按照logback.xml中定义的格式输出到控制台。 ### 回答2: Spring Boot是基于Spring框架的一个快速开发脚手架,轻量级、易上手、灵活,因此被广泛地应用于各种Java Web应用的开发。而Logback又是一个灵活、高效、可扩展的日志框架,它支持多种输出渠道、提供丰富的日志格式控制,适用于各种规模的应用。 Spring Boot默认采用的是logback作为日志框架,因此我们只需要按照logback配置规范进行配置即可。 在Spring Boot项目中,我们只需要在classpath下增加logback.xml或者logback-spring.xml配置文件即可完成基本的配置。这样我们就可以通过代码中的logger来输出日志信息,例如: ``` import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SampleController { private static final Logger logger = LoggerFactory.getLogger(SampleController.class); public void doSomething() { logger.debug("The value of x is {}", x); } } ``` 上面的代码中,我们利用LoggerFactory来创建logger实例,然后使用debug方法输出一条日志信息。在日志信息中,我们可以使用一些占位符来实现变量的替换。这样设计不仅简化了代码,也提高了日志输出的灵活性和可读性。 除了基本的日志输出,我们还可以通过配置来实现更高级的日志操作。例如,我们可以通过配置appender来指定日志输出到哪些地方;通过设置logger的级别来控制哪些级别的日志需要输出;通过设置pattern来控制日志信息的格式等等。 下面是一个简单的logback.xml配置文件示例: ``` <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/myapp.log</file> <encoder> <pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logs/myapp.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>7</maxHistory> </rollingPolicy> </appender> <logger name="com.example" level="INFO"/> <root level="DEBUG"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> </configuration> ``` 上面的配置文件中,我们定义了两个appender,一个是输出到控制台的CONSOLE,一个是输出到文件的FILE。其中,FILE使用了RollingFileAppender来实现日志文件的滚动保存。我们还定义了一个logger,指定com.example包下的日志级别为INFO,最后利用root指定日志输出的级别和appender。 总之,Spring Boot的logback配置非常简单,只需要增加一个配置文件即可完成基本的配置,根据实际需求可以进行更高级的配置,利用Spring Boot和logback可以实现高效、灵活、可扩展的日志管理。 ### 回答3: springboot是基于spring框架的快速开发脚手架,它可以帮助我们快速搭建一个开发框架,从而让我们更加专注业务逻辑的实现。而在开发过程中,日志的记录是一个非常必要的功能,对于一些问题的排查和优化起着至关重要的作用。logback是一个开源的日志组件,可以帮助我们记录和管理日志,它是slf4j的实现,可以帮助我们很好地打印日志。 下面我们来了解一下如何在springboot配置logback。 1. 首先在pom.xml中引入logback的依赖,如下: ```xml <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> ``` 2. 在src/main/resources/目录下创建logback-spring.xml文件,并在里面进行配置。例如: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 定义日志输出格式 --> <property name="fileName" value="./logs/project.log" /> <property name="pattern" value="%d [%thread] %-5level %logger{36} - %msg%n" /> <!-- 定义控制台输出 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${pattern}</pattern> </encoder> </appender> <!-- 定义文件输出 --> <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${fileName}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>./logs/project.log.%d{yyyy-MM-dd}.gz</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>${pattern}</pattern> </encoder> </appender> <!-- 定义日志级别 --> <root level="info"> <appender-ref ref="console" /> <appender-ref ref="file" /> </root> </configuration> ``` 在上面的配置中,logback-spring.xml中定义了控制台输出和文件输出,并且在配置好输出格式后,将其配置给控制台输出appender和文件输出appender,用于生成日志文件。同时,这里的配置还包括日志级别的定义。最终,我们可以在文件"./logs/project.log"中看到日志的输出。 3. 在springboot的application.yml中,可以设置不同的日志级别。例如: ```yaml logging: level: root: info com.abc.service: debug ``` 这里用到了yaml的语法。其中,root是所有日志的父级别,这里设置为info,则所有级别高于这个的日志都会被记录。com.abc.service是一个具体的服务类包名,我们可以单独设置其级别,这里设置为debug,表示这个类的日志记录级别为debug级别。 经过上述步骤的配置,我们就可以在springboot的应用中成功使用logback日志组件。在开发过程中,可以方便地记录和管理日志,从而更好地维护和优化我们的项目。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值