zoukankan      html  css  js  c++  java
  • Log4j教程

    Log4j教程

    一、快速上手

    log4j把日志分为:all,trace,debug,info,warnig,error,fital,off等几个级别。级别高的会屏蔽级别的的信息。

    1)maven导入jar包

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <project xmlns="http://maven.apache.org/POM/4.0.0"
     3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     5 <modelVersion>4.0.0</modelVersion>
     6 
     7 <groupId>com.tang.logtest</groupId>
     8 <artifactId>logtest</artifactId>
     9 <version>1.0-SNAPSHOT</version>
    10 
    11 <dependencies>
    12     <dependency>
    13         <groupId>org.slf4j</groupId>
    14         <artifactId>slf4j-api</artifactId>
    15         <version>1.7.13</version>
    16     </dependency>
    17 
    18     <dependency>
    19         <groupId>org.slf4j</groupId>
    20         <artifactId>jcl-over-slf4j</artifactId>
    21         <version>1.7.13</version>
    22         <scope>runtime</scope>
    23     </dependency>
    24 
    25     <!--核心log4j2jar包-->
    26     <dependency>
    27         <groupId>org.apache.logging.log4j</groupId>
    28         <artifactId>log4j-api</artifactId>
    29         <version>2.4.1</version>
    30     </dependency>
    31     <dependency>
    32         <groupId>org.apache.logging.log4j</groupId>
    33         <artifactId>log4j-core</artifactId>
    34         <version>2.4.1</version>
    35     </dependency>
    36 
    37     <!--用于与slf4j保持桥接-->
    38     <dependency>
    39         <groupId>org.apache.logging.log4j</groupId>
    40         <artifactId>log4j-slf4j-impl</artifactId>
    41         <version>2.4.1</version>
    42     </dependency>
    43 
    44     <!--web工程需要包含log4j-web,非web工程不需要-->
    45     <dependency>
    46         <groupId>org.apache.logging.log4j</groupId>
    47         <artifactId>log4j-web</artifactId>
    48         <version>2.4.1</version>
    49         <scope>runtime</scope>
    50     </dependency>
    51 
    52     <!--需要使用log4j2的AsyncLogger需要包含disruptor-->
    53     <dependency>
    54         <groupId>com.lmax</groupId>
    55         <artifactId>disruptor</artifactId>
    56         <version>3.2.0</version>
    57     </dependency>
    58 </dependencies>
    59 
    60 <build>
    61     <finalName>log4j-test</finalName>
    62     <plugins>
    63         <plugin>
    64             <artifactId>maven-compiler-plugin</artifactId>
    65             <version>3.1</version>
    66             <configuration>
    67                 <source>1.8</source>
    68                 <target>1.8</target>
    69             </configuration>
    70         </plugin>
    71     </plugins>
    72 </build>
    73 </project>

    2)classpath下的配置文件log4j2.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <configuration status="OFF">
     3     <appenders>
     4         <Console name="Console" target="SYSTEM_OUT">
     5             <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
     6         </Console>
     7     </appenders>
     8     <loggers>
     9         <logger name="com.tang.test.Log4jTest" level="trace" additivity="false">
    10             <appender-ref ref="Console"/>
    11         </logger>
    12         <root level="error">
    13             <appender-ref ref="Console"/>
    14         </root>
    15     </loggers>
    16 </configuration>

    3)java文件

     1 package com.tang.test;
     2 
     3 import org.apache.logging.log4j.LogManager;
     4 import org.apache.logging.log4j.Logger;
     5 import org.slf4j.LoggerFactory;
     6 
     7 /**
     8  * @author Tang Jiujia
     9  * @since 2017-09-14
    10  */
    11 public class Log4jTest {
    12 
    13     public static Logger logger= LogManager.getLogger(Log4jTest.class);
    14 
    15     public static void main(String[] args){
    16 //  使用slf4j的代码       Logger logger = LoggerFactory.getLogger(Log4jTest.class);
    17 //  slf4j只是一个门面(facet),它不包含具体的实现,而是将一些log4j,java.logging等实现包装成统一的接口。
    18         logger.trace("trace 信息");
    19         logger.debug("debug 信息");
    20         logger.info("info 信息");
    21         logger.warn("warn 信息");
    22         logger.error("error 信息");
    23         logger.fatal("fatal 信息");
    24 
    25         try{
    26             String str=null;
    27             str.length();
    28         }catch (Exception e){
    29             logger.debug("debug 一个异常!",e);
    30             logger.fatal("一个致命的错误",e);
    31         }
    32     }
    33 }

    16:03:59.825 [main] TRACE com.tang.test.Log4jTest - trace 信息
    16:03:59.825 [main] DEBUG com.tang.test.Log4jTest - debug 信息
    16:03:59.825 [main] INFO com.tang.test.Log4jTest - info 信息
    16:03:59.825 [main] WARN com.tang.test.Log4jTest - warn 信息
    16:03:59.825 [main] ERROR com.tang.test.Log4jTest - error 信息
    16:03:59.826 [main] FATAL com.tang.test.Log4jTest - fatal 信息
    16:03:59.826 [main] DEBUG com.tang.test.Log4jTest - debug 一个异常!
    java.lang.NullPointerException
    at com.tang.test.Log4jTest.main(Log4jTest.java:27) [classes/:?]
    16:03:59.829 [main] FATAL com.tang.test.Log4jTest - 一个致命的错误
    java.lang.NullPointerException
    at com.tang.test.Log4jTest.main(Log4jTest.java:27) [classes/:?]

    Process finished with exit code 0

    二、日志记录器(Logger)

    Logger负责记录日志。

    public static Logger logger= LogManager.getLogger(Log4jTest.class);

    Logger是有名字的,它的名字便是getlogger方法的参数(实际上为具体的类名)。

    Logger为单态模式:相同名字的Logger只有一个实例。

    Log4j中有一个跟记录器rootLogger,它是所有Logger的父亲。

    如果对某个Logger进行特殊的输出,覆盖父配置即可。

    三、配置详解

    (1).根节点Configuration有两个属性:status和monitorinterval,有两个子节点:Appenders和Loggers(可以定义多个Appender和Logger).

           status用来指定log4j本身的打印日志的级别.

           monitorinterval用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s.

        (2).Appenders节点,常见的有三种子节点:Console、RollingFile、File.

           Console节点用来定义输出到控制台的Appender.

            name:指定Appender的名字.

            target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT.

            PatternLayout:输出格式,不设置默认为:%m%n.

           File节点用来定义输出到指定位置的文件的Appender.

            name:指定Appender的名字.

            fileName:指定输出日志的目的文件带全路径的文件名.

            PatternLayout:输出格式,不设置默认为:%m%n.

           RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender.

            name:指定Appender的名字.

            fileName:指定输出日志的目的文件带全路径的文件名.

            PatternLayout:输出格式,不设置默认为:%m%n.

            filePattern:指定新建日志文件的名称格式.

            Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志.

            TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am.

            SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小.

            DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)。

        (3).Loggers节点,常见的有两种:Root和Logger.

           Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出

             level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.

             AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender.

           Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。

             level:日志输出级别

             name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点.

             AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。

    Simple is important!
  • 相关阅读:
    第5次作业
    第六次作业
    第五次作业
    软件需求最佳实践阅读笔记05
    软件需求最佳实践阅读笔记04
    构建民航知识图谱
    软件需求最佳实践阅读笔记03
    软件需求最佳实践阅读笔记02
    软件需求最佳实践阅读笔记01
    程序员的自我修养阅读笔记03
  • 原文地址:https://www.cnblogs.com/Shadowplay/p/7521231.html
Copyright © 2011-2022 走看看