Logback不一樣業務日誌寫入不一樣文件

真實開發中咱們常常有這樣的需求,須要將業務日誌和系統日誌進行區分,進行不一樣的採集。java

若是使用logback做爲日誌組件,該怎麼將不一樣日誌寫到不一樣文件呢?app

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_HOME" value="${catalina.base}/logs"/>
    <property name="encoding" value="UTF-8"/>
    <property name="normal-pattern"
              value="%d{yyyy-MM-dd/HH:mm:ss.SSS}|%X{localIp}|%X{requestId}|%X{requestSeq}|^_^|[%t] %-5level %logger{50} %line - %m%n"/>
    <property name="plain-pattern" value="%d{yyyy-MM-dd.HH:mm:ss} %msg%n"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>
                %d{yyyy-MM-dd/HH:mm:ss.SSS}|%X{localIp}|%X{requestId}|%X{requestSeq}|^_^|[%t] %-5level %logger{50} %line - %m%n
            </pattern>
        </encoder>
    </appender>

    <!--不一樣業務邏輯的日誌打印到不一樣文件-->
    <appender name="bizLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_HOME}/biz.log</File>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/biz.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="sysLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_HOME}/sys.log</File>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/sys.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>

    <!-- 不一樣的業務邏輯日誌打印到指定文件夾-->
    <logger name="bizLog" additivity="false" level="INFO">
        <appender-ref ref="bizLogAppender"/>
    </logger>
    <logger name="sysLog" additivity="false" level="INFO">
        <appender-ref ref="sysLogAppender"/>
    </logger>

    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

枚舉LogFileName

public enum LogFileName {

    SYS_LOG("sysLog"),
    BIZ_LOG("bizLog");

    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 && !item.logFileName.equals("")) {
                return item;
            }
        }
        return null;
    }
}

日誌工具類LoggerUtils

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());
    }
}

日誌打印

public class Application {

    private static final Logger sys_Log = LoggerUtils.Logger(LogFileName.SYS_LOG);
    private static final Logger biz_Log = LoggerUtils.Logger(LogFileName.BIZ_LOG);

    public static void main(String[] args) {
        sys_Log.info("我是系統日誌");
        biz_Log.info("我是業務日誌");
    }
}

輸出結果

輸入圖片說明

biz.log:工具

[2018-03-26 18:23:22.791] INFO [restartedMain] Application.java:33 - 我是業務日誌this

sys.log:rest

[2018-03-26 18:23:22.791] INFO [restartedMain] Application.java:32 - 我是系統日誌日誌

這樣咱們針對不一樣的日誌文件能夠自定義進行處理了。code

相關文章
相關標籤/搜索