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

ops/2024/10/23 9:32:23/

缘起

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

配置

  1. 先拷贝一份infoAppender配置过来改个名
  <!-- 监控日志 --><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配置
    <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 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>

http://www.ppmy.cn/ops/25972.html

相关文章

Go中为什么不建议用锁?

Go语言中是不建议用锁&#xff0c;而是用通道Channel来代替(不要通过共享内存来通信&#xff0c;而通过通信来共享内存)&#xff0c;当然锁也是可以用&#xff0c;锁是防止同一时刻多个goroutine操作同一个资源&#xff1b; GO语言中&#xff0c;要传递某个数据给另一个gorout…

C++证道之路第十五章友元、异常和其他

友元 友元函数&#xff1a; 友元函数不是类的成员函数&#xff0c;但能够访问类的私有&#xff08;private&#xff09;成员和保护&#xff08;protected&#xff09;成员。友元函数定义在类的外部&#xff0c;但在类的定义中通过friend关键字声明。友元函数可以是普通函数&a…

数据结构与算法学习笔记三---队列的表示和实现(C语言)

目录 前言 1.定义 2.队列的表示和实现 1.链队列 1.定义 2.初始化 3.入队 4.出队 5.队列为空 6.队列长度 7.清空队列 8.获取队首元素 9.完整代码 2.顺序队列 1.定义 2.初始化 3.入队 4.出队 5.队列为空 6.队列长度 7.清空队列 8.获取队首元素 9…

K8S集群安装

安装Docker sudo yum remove docker* sudo yum install -yum-utils ​ #配置docker的yum镜像仓库 sudo yum-config-manager \ --add-rep \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ​ #安装指定版本docker... sudo yum install -y docker-ce-19.03…

视觉语言模型详解

视觉语言模型可以同时从图像和文本中学习&#xff0c;因此可用于视觉问答、图像描述等多种任务。本文&#xff0c;我们将带大家一览视觉语言模型领域: 作个概述、了解其工作原理、搞清楚如何找到真命天“模”、如何对其进行推理以及如何使用最新版的 trl 轻松对其进行微调。 什…

开发一个语音聊天社交app小程序H5需要多少钱?

社交&#xff0c;即时通讯APP系统。如何开发一个社交App||开发一个即时通信应用是一项复杂而充满挑战的任务&#xff0c;需要考虑多个技术、开发时间和功能方面的因素。以下是一个概要&#xff0c;描述了从技术、开发时间和功能角度如何开发这样的应用&#xff1a; 1. 技术要点…

[note]李宏毅Deep Learning 之 BackPropagation笔记

文章目录 Gradient DescentMath premiseBack Propagationforward passbackward pass Summary 中文名&#xff1a;反向传播算法 用于Gradient Descent 来train 一个neural network时用到 BackPropagation的核心是通过链式法则改变微分形式&#xff0c;并用forward pass 与 back…

【论文笔记】Training language models to follow instructions with human feedback A部分

Training language models to follow instructions with human feedback A 部分 回顾一下第一代 GPT-1 &#xff1a; 设计思路是 “海量无标记文本进行无监督预训练少量有标签文本有监督微调” 范式&#xff1b;模型架构是基于 Transformer 的叠加解码器&#xff08;掩码自注意…