真实开发中咱们常常有这样的需求,须要将业务日志和系统日志进行区分,进行不一样的采集。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