前言:
项目中大部分都会使用到日志,不管是输出到控制台还是指定文件中,总会需要对应的配置我们才能正确并方便的实现我们的需求
需求
通过配置文件将日志输出到指定的位置
配置文件实现:
首先我的项目是springboot项目,使用的日志框架是log4j2,接下来话不多少,看代码(详细的解释在注释中会有体现)
<?xml version="1.0" encoding="UTF-8"?>
<!--status用来指定log4j本身的打印日志的级别-->
<Configuration status="WARN">
<!--定义全局变量,这里的全局变量可以供此文档中所用地方使用,更是为了方便管理-->
<properties>
<!--定义全局日志路径名称-->
<property name="LOG_HOME">logs/</property>
<property name="LOG_NAME">quartz</property>
<property name="INFO_NAME">quartz-info</property>
<property name="WARN_NAME">quartz-warn</property>
<property name="ERROR_NAME">quartz-error</property>
<!--日志输出格式化-->
<property name="log_pattern">[%p] %d{HH:mm:ss.SSS} [%t] %c{2}[%L]%m%n</property>
<!-- 单个日志文件最大大小,单位可以是KB, MB or GB -->
<property name="max_single_file_size">100 MB</property>
</properties>
<!--先定义所有的appender-->
<Appenders>
<!--定义输出到控制台的Appender-->
<Console name="Console" target="SYSTEM_OUT">
<!-- 只接受程序中Info级别的日志进行处理-->
<ThresholdFilter level="Info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${log_pattern}"/>
</Console>
<!--设置Info级别信息都输出到这个文件中,每次大小不超过指定大小,超过后自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingRandomAccessFile name="RollingFileInfo" fileName="${LOG_HOME}/${INFO_NAME}.log"
filePattern="${LOG_HOME}/${LOG_NAME}/$${date:yyyy-MM}/${INFO_NAME}-%d{yyyy-MM-dd}-%i.log">
<!--设置输出的日志文件-->
<PatternLayout pattern="${log_pattern}"/>
<!--定义要输出的日志级别-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<!--指定当文件大于250M则新建一个文件-->
<SizeBasedTriggeringPolicy size="${max_single_file_size}"/>
</Policies>
</RollingRandomAccessFile>
<!--设置warn级别信息都输出到这个文件中,每次大小不超过指定大小,超过后自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingRandomAccessFile name="RollingFileWarn" fileName="${LOG_HOME}/${WARN_NAME}.log"
filePattern="${LOG_HOME}/${LOG_NAME}/$${date:yyyy-MM}/${WARN_NAME}-%d{yyyy-MM-dd}-%i.log">
<!--只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
<!--设置输出的日志文件-->
<PatternLayout pattern="${log_pattern}"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="${max_single_file_size}"/>
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
<DefaultRolloverStrategy max="20"/>
</RollingRandomAccessFile>
<!--设置error级别信息都输出到这个文件中,每次大小不超过指定大小,超过后自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingRandomAccessFile name="RollingFileError" fileName="${LOG_HOME}/${ERROR_NAME}.log"
filePattern="${LOG_HOME}/${LOG_NAME}/$${date:yyyy-MM}/${ERROR_NAME}-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
!--设置输出的日志文件-->
<PatternLayout pattern="${log_pattern}"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="${max_single_file_size}"/>
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
<DefaultRolloverStrategy max="20"/>
</RollingRandomAccessFile>
</Appenders>
<!--定义logger,只有定义了logger并引入appender,appender才会生效,上面的那一堆日志的配置才会被使用到-->
<Loggers>
<!--用来指定项目的根日志-->
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFileInfo"/>
<AppenderRef ref="RollingFileWarn"/>
<AppenderRef ref="RollingFileError"/>
</Root>
<!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
<logger name="org.springframework" level="WARN"/>
<logger name="org.mybatis" level="WARN"/>
<logger name="config.RepositoryConfigurationDelegate" level="WARN"/>
</Loggers>
</Configuration>