Slf4j LogBack

LogBack


概述

  • Logback-core:1.1.2

配置示例

    <logger name="LogController" level="INFO">
        <appender-ref ref="LOG" />
    </logger>

    <appender name="LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log_root}/alligatorAct.log</file>
        <append>false</append>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志输出位置  可相对、和绝对路径 -->
            <fileNamePattern>${log_root}/alligatorAct.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6,
            则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除-->
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <charset>UTF-8</charset>
            <pattern>[%d{'MM-dd HH:mm:ss,SSS',GMT+8:00}] %-5p [%.10t][%X{CU}] %logger{36}[%L] - %m%n</pattern>
        </encoder>
    </appender>


标签含义

  • RollingFileAppender1
    • file: 当天日志文件名称,如果没有配置,默认取回滚策略配置的文件名称
    • append:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true
  • TimeBasedRollingPolicy1
    • fileNamePattern 配置归档日志的命名格式
      • 按天 %d{yyyy-MM-dd}
      • 按月 %d{yyyy-MM}
    • maxHistory 如果回滚策略是月,此时配置的时间是月;如果回滚策略配置的是天,此处是天数
    • cleanHistoryOnStart 是否删除历史归档日志,默认为 false
  • encoder和pattern节点组合用于具体输出的日志格式2

疑问梳理

  • 为何配置了 maxHistory 历史归档日志没有被删除?
    • 因为没有开启清除开关 cleanHistoryOnStart 配置 true
    • TimeBasedRollingPolicy
    public void start() {
        this.renameUtil.setContext(this.context);
        if (this.fileNamePatternStr != null) {
            this.fileNamePattern = new FileNamePattern(this.fileNamePatternStr, this.context);
            this.determineCompressionMode();
            this.compressor = new Compressor(this.compressionMode);
            this.compressor.setContext(this.context);
            this.fileNamePatternWCS = new FileNamePattern(Compressor.computeFileNameStr_WCS(this.fileNamePatternStr, this.compressionMode), this.context);
            this.addInfo("Will use the pattern " + this.fileNamePatternWCS + " for the active file");
            if (this.compressionMode == CompressionMode.ZIP) {
                String zipEntryFileNamePatternStr = this.transformFileNamePattern2ZipEntry(this.fileNamePatternStr);
                this.zipEntryFileNamePattern = new FileNamePattern(zipEntryFileNamePatternStr, this.context);
            }

            if (this.timeBasedFileNamingAndTriggeringPolicy == null) {
                this.timeBasedFileNamingAndTriggeringPolicy = new DefaultTimeBasedFileNamingAndTriggeringPolicy();
            }

            this.timeBasedFileNamingAndTriggeringPolicy.setContext(this.context);
            this.timeBasedFileNamingAndTriggeringPolicy.setTimeBasedRollingPolicy(this);
            this.timeBasedFileNamingAndTriggeringPolicy.start();
            if (this.maxHistory != 0) {
                this.archiveRemover = this.timeBasedFileNamingAndTriggeringPolicy.getArchiveRemover();
                this.archiveRemover.setMaxHistory(this.maxHistory);
                if (this.cleanHistoryOnStart) { // 为 true 时才会清理历史归档日志
                    this.addInfo("Cleaning on start up");
                    // 清理历史归档日志
                    this.archiveRemover.clean(new Date(this.timeBasedFileNamingAndTriggeringPolicy.getCurrentTime()));
                }
            }

            super.start();
        } else {
            this.addWarn("The FileNamePattern option must be set before using TimeBasedRollingPolicy. ");
            this.addWarn("See also http://logback.qos.ch/codes.html#tbr_fnp_not_set");
            throw new IllegalStateException("The FileNamePattern option must be set before using TimeBasedRollingPolicy. See also http://logback.qos.ch/codes.html#tbr_fnp_not_set");
        }
    }
  • 同时配置rollingPolicy 与 triggeringPolicy 日志无法写入
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
	<MaxFileSize>1MB</MaxFileSize>
</triggeringPolicy>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
	<FileNamePattern>/log/alligator/alligatorError.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
</rollingPolicy>

  • 需要更改配置3
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
	<FileNamePattern>${LOG_HOME}/info.%d{yyyyMMdd}.%i.log</FileNamePattern>
	<maxFileSize>100MB</maxFileSize>
	<MaxHistory>30</MaxHistory>
</rollingPolicy>

定向输出4

  • 打印 MyBatis 运行过程中的动态生成的SQL
    <logger name="mapper">
        <level value="DEBUG"/>
        <appender-ref ref="CONSOLE"/>
    </logger>
  • 无需调整 root 中的日志打印级别,可以直接配置
    • logger
      • name:用来指定此 logger 约束的某一个包或者具体的某一个类

  1. Logback各Appender详解及配置 ↩︎ ↩︎

  2. Logback常用配置详解 ↩︎

  3. logback每天生成日志失败,TimeBasedRollingPolicy和SizeBasedTriggeringPolicy冲突 ↩︎

  4. Logback配置文件详解 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot应用程序中,集成SLF4JLogback只需要几个简单的步骤: 1. 添加依赖 在pom.xml文件中添加以下依赖: ``` <!-- SLF4J API --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <!-- Logback Classic Module --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> ``` 2. 配置Logback 在src/main/resources目录下创建logback.xml文件,并添加以下内容: ``` <?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="STDOUT" 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="STDOUT" /> </root> </configuration> ``` 这个配置文件中定义了一个名为“STDOUT”的控制台输出的Appender,输出格式为时间戳、线程名称、日志级别、Logger名称和日志信息。根Logger的日志级别设置为INFO,表示只输出INFO及以上级别的日志。 3. 使用SLF4J 在应用程序中使用SLF4J进行日志记录,例如: ``` import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyService { private static final Logger logger = LoggerFactory.getLogger(MyService.class); public void doSomething() { logger.info("Doing something..."); } } ``` 这个示例中,通过调用LoggerFactory.getLogger()方法获取Logger实例,并使用Logger实例记录日志。 以上就是在Spring Boot应用程序中集成SLF4JLogback的简单步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值