1. 程式人生 > 實用技巧 >logback分執行緒輸出源,生成文件(每個測試用例生成單獨日誌)

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>

配置完成後,在我的測試類里加上這一句就可以直接用了(我的這個測試類是併發執行的,所有每次的執行緒不一樣)