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>7</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; } }
浙公网安备 33010602011771号