logback不同業(yè)務(wù)的日志打印到不同文件

在業(yè)務(wù)邏輯較為多的系統(tǒng)中,為了能快速的排查線上的問題和清楚的查詢各個(gè)業(yè)務(wù)的日志信息,往往需要對(duì)不同業(yè)務(wù)線的日志進(jìn)行分開記錄:
比如現(xiàn)在系統(tǒng)中有對(duì)小金庫(kù)用戶發(fā)放獎(jiǎng)勵(lì)和白條用戶進(jìn)行發(fā)放獎(jiǎng)勵(lì)。

logback.xml配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <appender name="SYS_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${catalina.base}/program/info.log</File>
        <append>true</append>
        <!--過濾器,只打INFO級(jí)別的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${catalina.base}/program/info.log.%d</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <appender name="SYS_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${catalina.base}/program/error.log</File>
        <append>true</append>
        <!--過濾器,只打ERROR級(jí)別的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${catalina.base}/program/error.log.%d</fileNamePattern>
            <maxHistory>12</maxHistory>
        </rollingPolicy>

        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--不同業(yè)務(wù)邏輯的日志打印到不同文件-->
    <appender name="baitiaoUserAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${catalina.base}/program/bt.log</File>
        <append>true</append>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${catalina.base}/program/bt.log.%d</fileNamePattern>
            <maxHistory>12</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <appender name="xjkUserAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${catalina.base}/program/xjk.log</File>
        <append>true</append>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${catalina.base}/program/xjk.log.%d</fileNamePattern>
            <maxHistory>12</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 不同的業(yè)務(wù)邏輯日志打印到指定文件夾-->
    <logger name="baitiaoUser" additivity="false" level="INFO">
        <appender-ref ref="baitiaoUserAppender"/>
    </logger>
    <logger name="xjkUser" additivity="false" level="INFO">
        <appender-ref ref="xjkUserAppender"/>
    </logger>

    <logger name="com.act.award" level="INFO"/>
    <logger name="com.act.award" level="DEBUG"/>

    <!--info和error分開打印-->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="SYS_INFO"/>
        <appender-ref ref="SYS_ERROR"/>
    </root>

</configuration>

代碼:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:/spring/application.xml")
public class MainTest {
    Logger XJK_USER_LOG = LoggerUtils.Logger(LogFileName.XJK_USER);
    Logger BAITIAO_USER_LOG = LoggerUtils.Logger(LogFileName.BAITIAO_USER);

    @Test
    public void testGetBusinessAccount() throws Exception {
        XJK_USER_LOG.info("小金庫(kù)用戶進(jìn)來(lái)了...");
        BAITIAO_USER_LOG.info("白條用戶進(jìn)來(lái)了...");
    }

}

public enum LogFileName {

    //配置到logback.xml中的logger name="vipUser"
    XJK_USER("xjkUser"),
    BAITIAO_USER("baitiaoUser");

    private String logFileName;

    LogFileName(String fileName) {
        this.logFileName = fileName;
    }

    public String getLogFileName() {
        return logFileName;
    }

    public void setLogFileName(String logFileName) {
        this.logFileName = logFileName;
    }

    public static LogFileName getAwardTypeEnum(String value) {
        LogFileName[] arr = values();
        for (LogFileName item : arr) {
            if (null != item && StringUtils.isNotBlank(item.logFileName)) {
                return item;
            }
        }
        return null;
    }
}

public class LoggerUtils {
    public static <T> Logger Logger(Class<T> clazz) {
        return LoggerFactory.getLogger(clazz);
    }

    /**
     * 打印到指定的文件下
     *
     * @param desc 日志文件名稱
     * @return
     */
    public static Logger Logger(LogFileName desc) {
        return LoggerFactory.getLogger(desc.getLogFileName());
    }
}

日志文件形式:

Paste_Image.png

bt.log內(nèi)容:
INFO [main] MainTest.java:23 - 白條用戶進(jìn)來(lái)了...
xjk.log內(nèi)容:
INFO [main] MainTest.java:22 - 小金庫(kù)用戶進(jìn)來(lái)了...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,992評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,972評(píng)論 6 342
  • 一:根節(jié)點(diǎn)包含的屬性: scan: 當(dāng)此屬性設(shè)置為true時(shí),配置文件如果發(fā)生改變,將會(huì)被重新加載,默認(rèn)值為tru...
    把愛放下會(huì)走更遠(yuǎn)閱讀 662評(píng)論 0 0
  • 有時(shí)候非常喜歡鑫垚華夏影城和天翼電影院這樣的地方,買一張票就是包場(chǎng)!一個(gè)人想看電影了就到這里來(lái),爽!
    煙神閱讀 374評(píng)論 0 0
  • 一、部分概念: 在描述統(tǒng)計(jì)中,世界是以事物、法則、數(shù)據(jù)相乘的哲學(xué)思辨的邏輯。其他的統(tǒng)計(jì)對(duì)世界的定義都是建立在描述統(tǒng)...
    嘉嘉_心理學(xué)愛好者閱讀 1,016評(píng)論 0 0