Logback writes different business logs to different files

In real development, we often have such requirements, and we need to distinguish business logs from system logs for different collections.

If logback is used as the log component, how to write different logs to different files?

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>

enum 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;
    }
}

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

log print

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("我是业务日志");
    }
}

output result

Enter image description

biz.log:

[2018-03-26 18:23:22.791] INFO [restartedMain] Application.java:33 - I am business log

sys.log:

[2018-03-26 18:23:22.791] INFO [restartedMain] Application.java:32 - I am syslog

In this way, we can customize the processing for different log files.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324376925&siteId=291194637