自定义配置需要的日志信息到指定文件

最近接到一个需求,想把指定的日志信息保存到指定的日志文件里

开发思路,既然是指定的日志,那么对日志信息进行过滤,过滤完写入到指定文件不就好了吗

贴代码

package com.xxx;

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;

public class CustomLogFilter extends Filter<ILoggingEvent> {

    @Override
    public FilterReply decide(ILoggingEvent event) {
        // 这里实现你的过滤逻辑
        // 例如,只接受包含特定字符串的日志记录
        String message = event.getFormattedMessage();
        System.out.println(message);
        if (message.contains("要过滤的关键词")) {
            return FilterReply.ACCEPT;
        } else {
            return FilterReply.DENY;
        }
    }
}

符合过滤关键词的放行,否则拒绝

编写日志附件器,这是个spring很好的设计

package com.xxx;
import ch.qos.logback.classic.PatternLayout;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.core.AppenderBase;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.FileAppender;
import ch.qos.logback.core.Layout;
import ch.qos.logback.core.encoder.Encoder;
import ch.qos.logback.core.rolling.RollingFileAppender;

import java.io.File;
import java.io.IOException;
public class CustomAppender extends RollingFileAppender<ILoggingEvent> {

    public Layout layout;
    public CustomAppender() {
        // 初始化操作,如果需要的话
    }

    @Override
    public void start() {
        if (this.encoder == null) {
            // 如果没有设置 Encoder,可以设置一个默认的
            this.encoder = new PatternLayoutEncoder();
        }
        if (this.layout == null) {
            // 如果没有设置 Layout,可以设置一个默认的
            this.layout = new PatternLayout();
        }
        super.start();
    }

    @Override
    public void stop() {
        super.stop();
        // 清理工作,如果需要的话
    }

    @Override
    protected void append(ILoggingEvent event) {
        if (this.isStarted()) {
            // 调用父类的 append 方法来处理日志事件
            super.append(event);
        }
    }

    // 可以添加额外的方法来设置文件路径等
}

最后配置logback-spring.xml

    <!--日志输出格式-->
    <property name="CUSTOM_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} %msg%n"/>
    <!--日志输出路径-->
    <property name="CUSTOM_FILE_PATH" value="D:/logs/custom/custom-%d{yyyy-MM-dd}.%i.log.gz"/>

    <!-- 定义自定义Appender -->
    <appender name="CustomAppender" class="com.xxx.CustomAppender">
        <file>D:/logs/custom.log</file>
        <!-- 设置日志格式 -->
        <!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责触发滚动, 即可以根据时间和文件大小进行拆分 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志输出位置 可相对、和绝对路径 -->
            <fileNamePattern>
                <!-- 下面中的%d表示安装天进行拆分日志文件,%i表示当某一天中日志文件大小超过 MaxFileSize标签规定的大小,i的取值会从1,2,3.....n这样的进行命令差分后的文件-->
                ${CUSTOM_FILE_PATH}
            </fileNamePattern>
            <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件,假设设置每个月滚动,且<maxHistory>是30天,
            则只保存最近30天的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除 -->
            <maxHistory>30</maxHistory>
            <!--按照文件大小进行拆分-->
            <MaxFileSize>10MB</MaxFileSize>
            <!-- 超出删除老文件 -->
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <!-- 设置日志输出格式 -->
            <pattern>${CUSTOM_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 添加自定义过滤器 -->
        <filter class="com.xxxx.CustomLogFilter" />
    </appender>

    <!-- 日志输出级别 yml配置优先 -->
    <root level="INFO">
        <appender-ref ref="CustomAppender"/>
    </root>

启动项目,需求搞定

效果如下

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值