随笔 - 836  文章 - 1 评论 - 40 阅读 - 102万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

  logback.xml

Appender: 中添加自定义的filter

复制代码
    <!--MIlESTONE 按照每天生成日志文件 -->
    <appender name="PROCESS_MILESTONE_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 添加自定义的过滤一些类的logger -->
        <filter class="com.sea.elsa.subscribe.milestone.filter.FilterSyncLogger" />
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名  每天一归档-->
            <fileNamePattern>${LOG_HOME}/${LOG_PREFIX}/${LOG_PREFIX}-process-%d{yyyyMMdd}.log.%i
            </fileNamePattern>
            <!--日志文件保留天数 -->
            <maxFileSize>100MB</maxFileSize>
            <MaxHistory></MaxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -
                %msg%n</pattern>
        </encoder>
        <!-- 设置过滤级别 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <!-- Safely log to the same file from multiple JVMs. Degrades performance! -->
        <prudent>false</prudent>
    </appender>
复制代码

 

 

 // 指定不同包下输入到不同的日志文件中

复制代码
    <logger name="com.sea.elsa.subscribe.milestone.listener.canal"
        level="info" additivity="false">
        <appender-ref ref="SYNC_MILESTONE_LOG" />
    </logger>
    <!-- 日志输出级别 -->
    <!-- <root level="DEBUG"> -->
    <root level="info">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="PROCESS_MILESTONE_LOG" />
    </root>
复制代码

 //指定 单个 class 打印到单独文件 ( root 中不用追加,否则会重复打印)

复制代码
  <!-- 日志输出级别  -->
    <root level="info">
        <appender-ref ref="INFO_FILE" />
    </root>
    //指定单个类
    <logger name="com.sea.gateway.filter.LogRequestPathRecordFilter">
        level="info" additivity="false">
        <appender-ref ref="REQUEST_PATH_RECORD" />
    </logger>
复制代码

 

 

自定义filter 

复制代码
package com.sea.elsa.subscribe.milestone.filter;

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

public class FilterSyncLogger extends Filter<ILoggingEvent> {
     
    @Override
    public FilterReply decide(ILoggingEvent event) {
      //也可以直接指定类名   event.getLoggerName().equals("com.sea.test")
        if (getPackName(event.getLoggerName()).equals("com.example.bootstart.log") //指定包名
                ||getPackName(event.getLoggerName()).equals("com.example.bootstart.log2"))
        {
            return FilterReply.ACCEPT;
        } else{
            return FilterReply.DENY;
        }
    }
 
    public String getPackName(String className){
        String packName = className.substring(0,className.lastIndexOf("."));
        return packName;
    }
 
}
复制代码

 

 

 

 

posted on   lshan  阅读(1100)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示