真實開發中咱們常常有這樣的需求,須要將業務日誌和系統日誌進行區分,進行不一樣的採集。java
若是使用logback做爲日誌組件,該怎麼將不一樣日誌寫到不一樣文件呢?app
<?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>
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; } }
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