spring中logback日志使用pid作为日志文件夹,用以区分进程日志

创建一个监听类

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;
	
	/**
	*logback.xml获取变量的方法
	*${PID}就可以使用
	*
	*@return
	*/
	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">
	
	<!-- 此处的class使用上边新建的LoggerStartupListener -->
	<contextListener class="LoggerStartupListener"/>
	
	<!--日志打印级别,生产保持value="info"-->
	<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"/>
	
	<!--输出到控制台ConsoleAppender-->
	<!--%d{HH:mm:ss.SSS}——日志输出时间%thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
	%-5level——日志级别,并且使用5个字符靠左对齐
	%logger{36}——日志输出者的名字
	%msg——日志消息
	%n——平台的换行符ThresholdFilter为系统定义的拦截器,例如我们用ThresholdFilter来过滤掉ERROR级别以下的日志不输出到文件中。如果不用记得注释掉,不然你控制台会发现没日志-->
	
	<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
	<!--展示格式layout-->
	<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">
	<!--如果只是想要Info级别的日志,只是过滤info还是会输出Error日志,因为Error的级别高,所以我们使用下面的策略,可以避免输出Error的日志-->
	<filter class="ch.qos.logback.classic.filter.LevelFilter">
	<!--过滤info-->
	<level>INFO</level>
	<!--匹配到就允许-->
	<onMatch>ACCEPT</onMatch>
	<!--不匹配的禁止-->
	<onMismatch>DENY</onMismatch>
	</filter>
	
	<!--日志名称,如果没有File属性,那么只会使用FileNamePattern的文件路径规则如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天的日志改名为今天的日期。即,<File>的日志都是当天的。-->
	<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>
	<!--每个文件最多100MB,保留15天的历史记录,但最多20GB-->
	<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">
	<!--如果只是想要Info级别的日志,只是过滤info还是会输出Error日志,因为Error的级别高,所以我们使用下面的策略,可以避免输出Error的日志-->
	<filter class="ch.qos.logback.classic.filter.LevelFilter">
	<!--过滤Error-->
	<level>DEBUG</level>
	<!--匹配到就允许-->
	<onMatch>ACCEPT</onMatch>
	<!--不匹配的禁止-->
	<onMismatch>DENY</onMismatch>
	</filter>
	
	<!--日志名称,如果没有File属性,那么只会使用FileNamePattern的文件路径规则如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天的日志改名为今天的日期。即,<File>的日志都是当天的。-->
	<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>
	<!--每个文件最多100MB,保留15天的历史记录,但最多20GB-->
	<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">
	<!--如果只是想要Error级别的日志,那么需要过滤一下,默认是info级别的,ThresholdFilter-->
	<filter class="ch.qos.logback.classic.filter.LevelFilter">
	<!--过滤Error-->
	<level>ERROR</level>
	<!--匹配到-->
	<onMatch>ACCEPT</onMatch>
	<!--没有匹配到-->
	<onMismatch>DENY</onMismatch>
	</filter>
	
	<!--日志名称,如果没有File属性,那么只会使用FileNamePattern的文件路径规则如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天的日志改名为今天的日期。即,<File>的日志都是当天的。-->
	<File>${log.dir}/error.${log.app.name}.log</File>
	
	<!--滚动策略,按照时间滚动TimeBasedRollingPolicy-->
	<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_HOME}/log/${appName}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>-->
	<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将会添加到这个loger-->
	<appender-ref ref="consoleLog"/>
	<!--开启文件日志-->
	<!--<appender-ref ref="infoFileLog"/>-->
	<!--<appender-ref ref="debugFileLog"/>-->
	<!--<appender-ref ref="errorFileLog"/>-->
	<!--<appender-ref ref="allLevelFileAppender"/>-->
	
	</root>
	</configuration>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值