Logback不同业务日志写入不同文件

真实开发中我们经常有这样的需求,需要将业务日志和系统日志进行区分,进行不同的采集。

如果使用logback作为日志组件,该怎么将不同日志写到不同文件呢?

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 - 我是业务日志

sys.log:

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

这样我们针对不同的日志文件可以自定义进行处理了。

猜你喜欢

转载自my.oschina.net/u/1000241/blog/1785167