springboot日志配置

发布时间 2023-10-24 12:42:04作者: 中国制造

logback

知识链接


? resource目录新建文件logback.xml,复制以下内容,并作适当修改即可完成

<?xml version="1.0" encoding="UTF-8"?>
<!--scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true-->
<!--scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟-->
<configuration scan="true" scanPeriod="30 seconds">
    <!--property:自定义的上下文属性配置,可以使用${name}的方式引用value值-->
    <property name="LOG_DIR" value="logs"/>
    <property name="APP_NAME" value="server-name"/>
    <property name="APP_PATH" value="/home"/>

    <!--自定义日志输出格式-->
    <!--<property name="CONSOLE_LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:- } [%15thread] %-40.40(%logger{40}.%method) : %msg%n"/>-->
    <!--<property name="FILE_LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:- } [%15thread] %-40.40(%logger{40}.%method) : %msg%n"/>-->
    <!--<property name="CONSOLE_COLOR_LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) %magenta(${PID:- }) [%15thread] %boldCyan(%-40.40(%logger{40}.%method)) : %msg%n"/>-->

    <!--引入spring boot默认的logback配置文件,这里使用和spring一致的输出格式-->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <!--标准输出:控制台日志-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--文件输出:追加日志到文件中-->
    <appender name="FILE-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--实时日志文件的存放路径和名称-->
        <file>${APP_PATH}/out.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!--设置滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--滚动切割产生的历史日志文件的存放路径和名称-->
            <!--%d{yyyy-MM-dd}:按天进行日志滚动-->
            <!--%i:当文件大小超过maxFileSize时,按照i进行文件滚动-->
            <FileNamePattern>${APP_PATH}/${LOG_DIR}/${APP_NAME}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--历史日志保存最大天数-->
            <MaxHistory>30</MaxHistory>
            <!--当日志文件超过指定的大小时,根据FileNamePattern标签里提到的%i进行日志文件滚动-->
            <maxFileSize>100MB</maxFileSize>
        </rollingPolicy>
    </appender>

    <!--细化日志中依赖包路径输出级别-->
    <logger name="org.springframework" level="info"/>

    <!--将appender都加入到root根标签-->
    <!--root级别 DEBUG 如果设置为WARN,则低于WARN的信息都不会输出-->
    <!--日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,配置WARN只会记录自身和比高于自身级别的日志-->
    <!--开发调试阶段打开控制台输出,日志级别设置为INFO,生产环境关闭控制台输出,只需要ERROR级别并记录到文件中-->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE-LOG"/>
    </root>
</configuration>

? logback的pattern配置

转换字符 效果
%logger 生成类名称,假设logger的名字为com.hello.rachel.service.SayService
%logger{0} ---> SayService
%logger{10} ---> c.h.r.s.SayService
%logger{25} ---> c.h.rachel.service.SayService
%d{pattern}或%date 生成日期: %d ---> 2022-07-05 19:00:00,000
%caller 生成日志调用者的位置信息,依赖JVM实现 %caller{2} ---> 0 [main] DEBUG - logging statement Caller+0 at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22) Caller+1 at mainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17)
%line 或 %L 生成日志请求所在的行号
%m 或 %msg 或 %message 生成日志具体信息
%n 行分隔符
%p 或 %level 生成日志级别
%t 或 %thread 生成日志事件的线程名
%X{key:-defaultVal} 或 %mdc 生成日志事件线程的MDC内容
%replace(p) 在子模式p产生的字符中,将所有出现正则表达式r的地方替换成t