Spring Boot使用Logback将某些日志输出到单独的文件

缘起

重构了某个接口,想监控下新接口各个处理过程的时间,从而评估和监控日常性能。监控使用Spring自带的StopWatch,日志使用Logback

配置

  1. 先拷贝一份infoAppender配置过来改个名
xml 复制代码
  <!-- 监控日志 -->
    <appender name="monitorAppender"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.dir}/logs/${project_name}_monitor.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.dir}/logs/${project_name}_monitor_%d{yyyy-MM-dd}.log
            </fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>${MONITOR_PATTERN}</pattern>
        </encoder>
    </appender>
  1. 添加单独的logger配置
xml 复制代码
    <logger name="monitorLogger">
        <appender-ref ref="monitorAppender" />
    </logger>
  1. 代码里面获取一下这个monitorLogger,然后输出就好了
java 复制代码
//获取
private static Logger monitorLogger = LoggerFactory.getLogger("monitorLogger");
//使用
monitorLogger.info(stopWatch.prettyPrint(TimeUnit.MILLISECONDS));

完整配置参考

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false">
    <property name="project_name" value="xxx"/>
    <property name="log.dir" value="/log/xxx"/> 
    <property name="MONITOR_PATTERN"
              value="[%d{yyyy-MM-dd HH:mm:ss.SSS}]-[%X{EagleEye-TraceID}][%thread]-[%-5level]-[%logger{50}:%L] - %msg%n"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <target>System.out</target>
        <encoder charset="UTF-8">
            <pattern>${MONITOR_PATTERN}</pattern>
        </encoder>
    </appender>

    <appender name="infoAppender"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.dir}/logs/${project_name}_info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.dir}/logs/${project_name}_info_%d{yyyy-MM-dd}.log
            </fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>${MONITOR_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 监控日志 -->
    <appender name="monitorAppender"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.dir}/logs/${project_name}_monitor.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.dir}/logs/${project_name}_monitor_%d{yyyy-MM-dd}.log
            </fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>${MONITOR_PATTERN}</pattern>
        </encoder>
    </appender>

    <appender name="errorAppender"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.dir}/logs/${project_name}_error.log</file>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.dir}/logs/${project_name}_error_%d{yyyy-MM-dd}.log
            </fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>${MONITOR_PATTERN}</pattern>
        </encoder>
    </appender>

    <logger name="monitorLogger">
        <appender-ref ref="monitorAppender" />
    </logger>
    <root>
        <level value="INFO"/>
<!--        <appender-ref ref="STDOUT"/>-->
        <appender-ref ref="infoAppender"/>
        <appender-ref ref="errorAppender"/>
    </root>

</configuration>
相关推荐
欧哈东哥11 分钟前
【C++】标准库中用于组合多个值的数据结构pair、tuple、array...
java·数据结构·c++
python_13615 分钟前
web请求和响应
java·spring·github
舒一笑1 小时前
Started TttttApplication in 0.257 seconds (没有 Web 依赖导致 JVM 正常退出)
jvm·spring boot·后端
ciku2 小时前
Spring AI Starter和文档解读
java·人工智能·spring
程序猿阿越2 小时前
Kafka源码(三)发送消息-客户端
java·后端·源码阅读
javadaydayup2 小时前
Apollo 凭什么能 “干掉” 本地配置?
spring boot·后端·spring
whitepure2 小时前
万字详解Java中的运算
java
AAA修煤气灶刘哥2 小时前
搞定 Redis 不难:从安装到实战的保姆级教程
java·redis·后端