log4j2.xml

本文介绍了如何在SpringBoot项目中配置log4j2,以实现INFO级别日志按小时生成新文件,ERROR级别日志按天生成新文件。详细内容包括依赖引入和log4j2.xml配置文件的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



以前在项目中使用log4j日志,都是别人配置好或者直接网上粘贴代码过来…现在新公司做新系统,要求我配置log4j实现info级别按小时产生新的文件记录,error级别按天产生新的文件记录,所以这次也就好好的看了一下log4j,进入正题:

1、导入依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
 </dependency>


2、配置文件:log4j2.xml  (我的项目是springboot,很多项目在使用log4j.xml,只是格式不同,是一样的)。


3、文件详解:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
	<!-- Properties定义一些属性,下面可以引用 -->
    <Properties>
    	<!-- 数据源名称,说明是哪个数据源下的,其实没啥用,可以不要 -->
        <Property name="PID">ecif_orgin</Property>
        <!-- 控制台日志的输出格式 -->
        <Property name="LOG_PATTERN">%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{magenta}
            %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n%wEx
        </Property>
        <!-- 日志存储的home目录 -->
        <property name="LOG_HOME">logs</property>
        <!-- error日志的文件名 -->
	    <property name="ERROR_FILE_NAME">myError</property>
	    <!-- warn日志的文件名 -->
	    <property name="WARN_FILE_NAME">myWarn</property>
	    <!-- info日志的文件名 -->
	    <property name="INFO_FILE_NAME">myInfo</property>
	    <!-- debug日志的文件名 -->
	    <property name="DEBUG_FILE_NAME">myDebug</property>
	    
	    <!-- 以上定义了常用4个级别的日志文件,本项目只使用了error和info -->
    </Properties>
    <Appenders>
    	<!-- console是控制台输出的日志,和存储在文件中的没关系 -->
        <Console name="Console" target="SYSTEM_OUT" follow="true">
        	<!-- 输出格式就是上面定义的 LOG_PATTERN-->
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </Console>
        
	   
	    
	    <!-- Info log -->
	    <!-- info级别的日志输出到文件,fileName是当前最新的文件的目录和名字,filePattern是老文件的目录和名字 ,,
	    	注意filePattern中的%d{yyyy-MM-dd-HH},精确到小时,说明按小时生成新文件,至于按几个小时生成,是下面的interval值决定-->
	    <RollingFile name="InfoLog" fileName="${LOG_HOME}/${INFO_FILE_NAME}.log" 
	    	filePattern="${LOG_HOME}/${INFO_FILE_NAME}/$${date:yyyy-MM-dd}/app-%d{yyyy-MM-dd-HH}-%i.log.gz" append="true">  
	        <!-- 输出格式,这里没有在上面的properties中定义 -->    
	        <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n"/>  
	        
	        <!-- 设置策略 ,,interval="1"代表一个小时生成一个文件-->  
	        <Policies>    
	            <TimeBasedTriggeringPolicy interval="1" modulate="true" />   
	        </Policies> 
	        
	        <!-- 过滤器 ,过滤掉不需要的级别-->
	        <Filters>
	        	<!-- warn和warn以上的级别拒绝(DENY) -->
	          <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
	          
	          <!-- info及info以上的级别接受 -->
	          <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
	          
	          <!-- 
	          	以上两个过滤器组合,在日志文件中就只剩下info的了
	          	一般onMatch和onMismatch都是以上面两种组合形式出现
	          	有人说info一定要放在warn后面,否则info以上的级别在info中被接受后,就不会走warn的过滤器里,这个我没试过,感觉有道理
	          	如果对log4j日志级别不清楚,一定要先弄清楚
	           -->
	        </Filters>
	    </RollingFile> 
	    
	    <!-- 以下这个是按天生成error级别的 日志文件,就不详解了-->
	      <RollingFile name="ErrLog" fileName="${LOG_HOME}/${ERROR_FILE_NAME}.log" 
	      	filePattern="${LOG_HOME}/${ERROR_FILE_NAME}/$${date:yyyy-MM-dd}/app-%d{yyyy-MM-dd}-%i.log.gz" append="true">  
	        <!-- 输出格式 -->    
	        <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n"/>  
	        <!-- 设置策略 -->  
	        <Policies>    
	            <TimeBasedTriggeringPolicy interval="1" modulate="true" />   
	        </Policies> 
	        <Filters>
	         <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
	        </Filters>
	    </RollingFile> 
    </Appenders>
    
    
    <Loggers>
        <Logger name="org.hibernate.validator.internal.util.Version" level="debug"/>
        <Logger name="org.hibernate.SQL" level="debug"/>
        <Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn"/>
        <Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn"/>
        <Logger name="org.apache.catalina.startup.DigesterFactory" level="error"/>
        
        <!-- 把上面定义的三个输出目标引用进来 -->
        <Root level="debug">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="ErrLog"/>
            <AppenderRef ref="InfoLog"/>
        </Root>
    </Loggers>
</Configuration>


以上是我按小时和天数来生成文件,,也可以按文件大小等等,方法是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值