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

相关文章
相关标签/搜索