logback使用技巧与分环境配置

Springboot默认使用的日志框架是Logback

在项目中,我们使用Logback,其实只需增加一个logback-spring.xml或logback.xml配置文件即可。

分环境配置:

当我们想根据不同环境如dev、sit、pro配置不同的日志配置时,就需要配合springboot的application.yml一起定义,配置如下:

首先,假设项目已经有application-dev.yml配置文件,只需在其中添加:

logging:
    #Linux下使用classpath:/logback-dev.xml
    #Windows下使用./src/main/resources/logback-dev.xml
    config: ./src/main/resources/logback-dev.xml

然后,在/src/main/resources目录下创建logback-dev.xml,内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <!-- 属性文件:在properties或yml文件中找到对应的配置项 -->
    <springProperty scope="context" name="logging.path" source="logging.path"/>
    <contextName>tesseract-ocr</contextName>
    <appender name="consoleLog" 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} [%thread] %-5level %logger{50} - %msg %n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--根据日志级别分离日志,分别输出到不同的文件-->
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--按时间保存日志 修改格式可以按小时、按天、月来保存-->
            <fileNamePattern>${logging.path}/demo.info.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--保存时长-->
            <MaxHistory>10</MaxHistory>
            <!--文件大小-->
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder>
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n
            </pattern>
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>${logging.path}/demo.error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <MaxHistory>10</MaxHistory>
        </rollingPolicy>
    </appender>
    <root level="debug">
        <appender-ref ref="consoleLog"/>
        <!-- <appender-ref ref="fileInfoLog"/>
        <appender-ref ref="fileErrorLog"/> -->
    </root>
</configuration>

最后,根据不同环境对配置文件的内容做类似的修改即可。

使用技巧

日志文件保存路径配置技巧

通常情况下我们一般把日志文件保存路径配置通过<property scope="system" name="LOG_DIR" value="./logs" />配置。通过${LOG_DIR}来使用,此种配置方法把路径固定在了logback的配置文件中,为了后续更方便配置我们可以将其通过如下方式改进一下。

在上边的logback-dev.xml配置中有这么一项:<springProperty scope="context" name="logging.path" source="logging.path"/>

此配置的作用就是把日志文件的保存路径配置交给application-dev.yml来配置,只要在application-dev.yml中添加如下配置即可:

logging:
    path: ./logs

注意名称须一致。

日志级别控制

从上边的DEMO中我们知道日志级别是通过<root level="debug">配置的。我们也可以通过springboot配置。只要application-dev.yml中添加:

logging:
    level:
        root: info

即可。注意如果在application-dev.yml配置了日志级别那么logback-dev.xml的root配置的级别将失效,项目启动日志级别将以application中配置的级别为准。

对项目中的某一个类指定专门的日志处理

在实际应用场景中,我们可遇到需要单独对项目中的某一个业务处理类进行单独的日志处理。此时可通过如下方式解决;

假如项目中有一个schedule的任务调度类,我们需要做单独的日志处理,则配置如下:

 <!--特殊功能单独appender 例如调度类的日志-->
    <appender name="CLASS-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <encoder>
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n
            </pattern>
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>${logging.path}/schedule.class.%d{yyyy-MM-dd}.log</fileNamePattern>
            <MaxHistory>90</MaxHistory>
        </rollingPolicy>
    </appender>
    <!--这里的name和业务类中的getLogger中的字符串是一样的-->
    <logger name="schedule" level="INFO" additivity="true">
        <appender-ref ref="CLASS-APPENDER" />
    </logger>

注意logger的name就是private Logger LOGGER= LoggerFactory.getLogger("schedule");中的字符串。

如果我们使用的是lomok插件,则schedule指的是topic

@Slf4j(topic = "schedule")
public class ScheduleService{

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅气的梧桐述

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值