logback分线程输出源,生成文档(每个测试用例生成单独日志)

最近写并发测试,所有执行的用例日志都打印在了一起,觉得很难排查问题,所有学习做了一个分线程输出日志的功能。这是我配置的xml文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="log.base" value="/testNglogs" />
<!-- 分线程输出源 使用滚动生成文档-->
<!-- 使用 MDC 的 appender -->
<appender name="FILE_CUSTOM" class="ch.qos.logback.classic.sift.SiftingAppender">
<!-- discriminator 的默认实现类 ch.qos.logback.classic.sift.MDCBasedDiscriminator -->
<discriminator>
<key>logName</key>
<defaultValue>MyFile</defaultValue>
</discriminator>
<sift>
<!-- 标准的文件输出 Appender, 文件名根据 MDC 动态生成 -->
<appender name="FILE-${logName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>D:/test2/${logName}.log</file>
<!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志输出位置 可相对、和绝对路径 -->
<fileNamePattern>D:/test2/%d{yyyy-MM-dd}/${logName}.log</fileNamePattern>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
</sift>
</appender>

<!-- 分线程输出源 不使用滚动生成文档-->
<!-- 使用 MDC 的 appender -->
<appender name="FILE_CUSTOM3" class="ch.qos.logback.classic.sift.SiftingAppender">
<!-- discriminator 的默认实现类 ch.qos.logback.classic.sift.MDCBasedDiscriminator -->
<discriminator>
<key>logName</key>
<defaultValue>MyFile</defaultValue>
</discriminator>
<sift>
<!-- 标准的文件输出 Appender, 文件名根据 MDC 动态生成 -->
<appender name="FILE-${logName}" class="ch.qos.logback.core.FileAppender">
<file>${log.base}/${logName}.html</file>
<append>false</append><!-- true表示追加记录,false表示清空后重新记录 -->
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<!--<layout class="ch.qos.logback.classic.html.HTMLLayout">
</layout>-->
<!-- 自定义的org.autoAppUI.MyHTMLLayout-->
<layout class="org.logUtils.MyHTMLLayout">
<pattern>%d{yyyy-MM-dd/HH:mm:ss.SSS}%logger%t%M%line%p%m</pattern>
</layout>
</encoder>
</appender>
</sift>
</appender>
<root level="INFO">
<appender-ref ref="FILE"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE_CUSTOM"/>
<appender-ref ref="FILE_CUSTOM3"/>
</root>
<!--配置我不想打印的类的日志 -->
<logger name="me.chyxion.jdbc.NewbieJdbcSupport" level="Error" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE_CUSTOM"/>
<appender-ref ref="FILE_CUSTOM3"/>
</logger>
<logger name="com.alibaba.druid.pool.DruidDataSource" level="Error" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE_CUSTOM"/>
<appender-ref ref="FILE_CUSTOM3"/>
</logger>
</configuration>

配置完成后,在我的测试类里加上这一句就可以直接用了(我的这个测试类是并发执行的,所有每次的线程不一样)

你再不自己敲代码,你的四肢就退化了
原文地址:https://www.cnblogs.com/boqinyaxin/p/13427504.html