log4j2.xml

来源:互联网 发布:minecraft java 编辑:程序博客网 时间:2024/05/17 08:53

以前在项目中使用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>


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

原创粉丝点击