zoukankan      html  css  js  c++  java
  • log4j2按日志级别输出到指定文件

    在项目中,可能会产生非常多的日志记录,为了方便日志分析,一般可以将日志按级别输出到指定文件,本次就先说说log4j2的实现吧:

    1、先加入log4j2依赖包

    2、写一个java类进行测试,类文件中仅仅写几行日志:

     1 package com.jessezeng.log4j2.test;
     2 
     3 import org.apache.logging.log4j.LogManager;
     4 import org.apache.logging.log4j.Logger;
     5 
     6 public class Test {
     7     
     8     private static  Logger log=LogManager.getLogger(Test.class);
     9     public static void main(String[] args) {
    10           log.info("info test...................");
    11           log.error("error test...................");
    12     }
    13 }

    3、配置log4j2xml:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!-- status="OFF",可以去掉,它的含义为是否记录log4j2本身的event信息,默认是OFF -->
     3 <configuration status="OFF">
     4     <!-- 定义下面的引用名 -->
     5     <Properties>
     6         <property name="log_pattern"> %d %-5p [%c] %m%n</property> 
     7         <property name="basePath">/logs</property>
     8 
     9         <property name="common-msg">${basePath}/common.log</property>
    10         <property name="rollingfile_common-msg">${basePath}/common%d{yyyy-MM-dd}.log</property>
    11 
    12         <property name="error-msg">${basePath}/error.log</property>
    13         <property name="rollingfile_error-msg">${basePath}/error%d{yyyy-MM-dd}.log</property>
    14 
    15     </Properties>
    16     <!--先定义所有的appender -->
    17     <appenders>
    18         <!--输出控制台的配置 -->
    19         <Console name="Console" target="SYSTEM_OUT">
    20             <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
    21             <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
    22             <!--输出日志的格式 -->
    23             <PatternLayout pattern="${log_pattern}" />
    24         </Console>
    25 
    26         <!--打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
    27         <!-- 按月生成归档日志,可以使用 filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log" -->
    28         <RollingFile name="rollingfile_common-msg"
    29             filename="${common-msg}" filePattern="${rollingfile_common-msg}"
    30             append="true">
    31             <Filters>
    32                 <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
    33                 <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
    34              </Filters>
    35             <Policies>
    36                 <TimeBasedTriggeringPolicy />
    37             </Policies>
    38         </RollingFile>
    39 
    40         <RollingFile name="rollingfile_error-msg"
    41             filename="${error-msg}" filePattern="${rollingfile_error-msg}"
    42             append="true">
    43              <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
    44             <PatternLayout>
    45                 <Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %class{36} %L %M - %msg%xEx%n</Pattern>
    46             </PatternLayout>
    47             <Policies>
    48                 <TimeBasedTriggeringPolicy />
    49             </Policies>
    50         </RollingFile>
    51     </appenders>
    52     <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
    53     <loggers>
    54         <AsyncLogger name="net.shgaoxin.log4j2test" level="info" additivity="false"  includeLocation="true">
    55             <AppenderRef ref="rollingfile_common-msg"  />
    56             <AppenderRef ref="rollingfile_error-msg" />
    57         </AsyncLogger>
    58     </loggers>
    59 </configuration>

    需要注意的是ThresholdFilter的onMatch/onMismatch的三个选项值:ACCEPT/DENY/NEUTRAL,如果有多个ThresholdFilter,那么Filters是必须的,在Filters中,首先要过滤不符合的日志级别,把不需要的首先DENY掉,然后再ACCEPT需要的日志级别,同时也需要注意次序。

  • 相关阅读:
    反射 Reflect Modifier 修饰符工具类
    【泛型】Generic 参数化类型 类型转换
    泛型 Generic 类型擦除引起的问题及解决方法
    注解 Annotation 简介 总结 MD
    反射 Reflect Class 基础 API MD
    【Type】类型 ParameterizedType
    Java中浮点类型的精度问题 double float
    jQuery之$.ajax()方法详解及实例
    pace.js – 加载进度条插件
    在线代码编辑、保存与运行网址推荐
  • 原文地址:https://www.cnblogs.com/jessezeng/p/5144317.html
Copyright © 2011-2022 走看看