创建一个监听类
import ch.qos.logback.classic.Level;
impor tch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.LoggerContextListener;
import ch.qos.logback.core.Context;
import ch.qos.logback.core.spi.ContextAwareBase;
import utils.SystemUtil;
public class LoggerStartupListener extends ContextAwareBase implements LoggerContextListener{
privatebooleanstarted=false;
private String getPid(){
return SystemUtil.getPid();
}
@Override
public boolean isResetResistant(){
return false;
}
@Override
public void onStart(LoggerContext loggerContext){
if(started){
return;
}
Context context=getContext();
context.putProperty("PID",getPid());
started=true;
}
@Override
publicvoidonReset(LoggerContextloggerContext){
}
@Override
public void onStop(LoggerContext loggerContext){
}
@Override
public void onLevelChange(Logger logger,Level level){
}
}
在配置文件中使用 ${PID}获取
<?xmlversion="1.0"encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10seconds" debug="false">
<contextListener class="LoggerStartupListener"/>
<property name="root.level" value="debug"/>
<property name="log.dir" value="./log/${PID}/"/>
<property name="log.app.name" value="appname"/>
<property name="encoding" value="UTF-8"/>
<contextName>${log.app.name}</contextName>
<property name="console.pattern" value="%d{HH:mm:ss.SSS}[%thread]%logger{36}%-5level-%msg%n"/>
<property name="info.pattern" value="%d{HH:mm:ss.SSS}[%thread]%-5level-%msg%n"/>
<property name="debug.pattern" value="%d{HH:mm:ss.SSS}[%thread]%logger{36}%-5level-%msg%n"/>
<property name="error.pattern" value="%d{HH:mm:ss.SSS}[%thread]%-5level-%msg%n"/>
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<charset>${encoding}</charset>
<pattern>${console.pattern}</pattern>
</encoder>
</appender>
<appender name="infoFileLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<File>${log.dir}/info.${log.app.name}.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.dir}/info.${log.app.name}-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>1</maxHistory>
<totalSizeCap>10KB</totalSizeCap>
<cleanHistoryOnStart>false</cleanHistoryOnStart>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<charset>${encoding}</charset>
<pattern>${info.pattern}</pattern>
</encoder>
</appender>
<appender name="debugFileLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<File>${log.dir}/debug.${log.app.name}.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.dir}/debug.${log.app.name}.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>7</maxHistory>
<totalSizeCap>5GB</totalSizeCap>
<cleanHistoryOnStart>false</cleanHistoryOnStart>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<charset>${encoding}</charset>
<pattern>${debug.pattern}</pattern>
</encoder>
</appender>
<appender name="errorFileLog"class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<File>${log.dir}/error.${log.app.name}.log</File>
<rollingPolicyc lass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.dir}/error.${log.app.name}.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>1</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<charset>${encoding}</charset>
<pattern>${error.pattern}</pattern>
</encoder>
</appender>
<appender name="allLevelFileAppender"class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.dir}/all.${log.app.name}.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.dir}/all.${log.app.name}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<MaxHistory>1</MaxHistory>
<totalSizeCap>100MB</totalSizeCap>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-ddHH:mm:ss.SSS,CTT}[%thread]-[%-5level][%logger{50}:%line]-%msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<logger name="org.springframework.data.redis.core.RedisConnectionUtils"level="OFF"/>
<root level="${root.level}">
<appender-ref ref="consoleLog"/>
</root>
</configuration>