zoukankan      html  css  js  c++  java
  • log4j v2版本的配置和使用

    一、前言

      Log4j目前使用的有两个版本,分别是v1.x和2.x,相关的信息可以查看官方文档:http://logging.apache.org/log4j/2.x/index.html

    二、引入依赖

      本文介绍log4j 2的用法,所以引入v2的jar包

    <!--https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core-->
    <dependency>
    	<groupId>org.apache.logging.log4j</groupId>
    	<artifactId>log4j-core</artifactId>
    	<version>2.12.1</version>
    </dependency>
    

      

    三、配置log4j

      可以参考官方文档:http://logging.apache.org/log4j/2.x/manual/configuration.html

      log4j v1使用properties文件进行配置;而log4j v2,常见的做法是使用xml进行配置。

      在resources目录下创建一个log4j2.xml,注意不是log4j.xml,先看下面的一个简单的配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration>
    	<Appenders>
    		<Console name="log_to_console" target="SYSTEM_OUT">
    			<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
    		</Console>
    
    		<File name="log_to_file" fileName="/opt/logs/app.log">
    			<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
    		</File>
    	</Appenders>
    
    	<Loggers>
    		<Root level="info">
    			<AppenderRef ref="log_to_console"/>
    		</Root>
    	</Loggers>
    </Configuration>

      上面这个配置中,<Configuration>下有<Appenders>和<Loggers>两个标签。

      其中<Appenders>可以理解为日志的输出方式,可以是日志文件(File),也可以是可控制台输出(Console)。

    3.1、<appenders>配置日志输出方式

      日志输出方式一般有两种,控制台输出(Console)和日志文件输出(File),在log4j 2中,分别对应<Console>和<File>标签。

    <Appenders>
    	<Console name="log_to_console" target="SYSTEM_OUT">
    		<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
    	</Console>
    
    	<File name="log_to_file" fileName="/opt/logs/app.log">
    		<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
    	</File>
    </Appenders>
    

      上面定义了两个日志输出方式:

      Console的输出方式,名称为log_to_console(这个名称是为了后面需要引用它),输出到SYSTEM_OUT(也就是控制台了);

      File的输出方式,名称为log_to_file(名称可以随意指定),然后指定了日志文件的路径为/opt/logs/app.log。

      Console和File,其实可以统称为<Appender>(因为在<Appenders>标签下嘛)。

      这两个标签都有一个<PatternLayout>标签,这就是指定输出的日志格式,具体的格式可以查看官方文档。

      

      虽然日志有Console和File两种形式,但是还是<Appenders>中却可以配置多个Appender,比如虽然都为日志文件输出形式,但是文件名不同,就是不同的Appender,并不会冲突:

    <Appenders>
    	<Console name="log_to_console" target="SYSTEM_OUT">
    		<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
    	</Console>
    
    	<File name="log_to_file" fileName="/opt/logs/app.log">
    		<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
    	</File>
    
    	<!-- 再定义一个日志文件输出的Appender -->
    	<File name="log_to_file_two" fileName="/opt/logs/app_2.log">
    		<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
    	</File>
    </Appenders>
    

      

    3.2、<Loggers>配置日志级别

      log4j 2有trace、debug、info、warn、error、fatal这几种日志级别,按照顺序严重程度递增。

      而<Loggers>可以理解配置不同的日志级别使用不同的日志输出方式,看下面的配置:

    <Loggers>
    	<Root level="error">
    		<AppenderRef ref="log_to_file"/>
    	</Root>
    	
    	<logger level="info">
    		<AppenderRef ref="log_to_console"/>
    	</logger>
    
    	<logger level="warn">
    		<AppenderRef ref="log_to_file_two"/>
    	</logger>
    </Loggers>
    

      上面的配置中,配置了三个<logger>(<Root>也算一个<logger>),每一个<logger>下面有一个<AppenderRef>,指定以什么形式输出日志(File还是Console)。

      <Root>是一个比较特殊的<logger>,用来定义全局的日志界别,

      一个<logger>下面可以有一个或者多个<AppenderRef>:

      1、上面定义了全局的,只要是error级别或者比如error更高,都会将将日志写到/opt/logs/app.log中(log_to_file是前面<Appenders>中配置的);

      2、日志界别为info或者比info更高的级别,就会将日志输出到控制台(log_to_console是前面<Appenders>中配置的);

      3、日志界别为warn或者比warn更高的级别,就会将日志输出到/opt/logs/app_2.log(log_to_file_two是前面<Appenders>中配置的);

    3.3、稍微拓展

      一个级别的日志,比如info日志,我们可能既需要输出到控制台,也需要输出到日志文件中。

      log4j 2可以这样做,前面已经说过了,一个<logger>下可以有多个<AppenderRef>,比如下面这段配置:

    <Loggers>
    	<Root level="error">
    		<AppenderRef ref="log_to_file"/>
    	</Root>
    
    	<!-- info或比info更高级别的日志,既输出到控制台,也输出到日志文件中-->
    	<logger level="info">
    		<AppenderRef ref="log_to_console"/>
    		<AppenderRef ref="log_to_file"/>
    	</logger>
    </Loggers>
    

      

    3.4、结合<Appenders>和<loggers>

      有了前面的了解,下面是一个例子,就可以理解了:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration>
    	<Appenders>
    		<Console name="log_to_console" target="SYSTEM_OUT">
    			<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
    		</Console>
    
    		<Console name="log_to_console_two" target="SYSTEM_OUT">
    			<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
    		</Console>
    
    		<File name="log_to_file" fileName="/opt/logs/app.log">
    			<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
    		</File>
    		
    		<File name="log_to_file_two" fileName="/opt/logs/app_2.log">
    			<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
    		</File>
    	</Appenders>
    
    	<Loggers>
    		<Root level="error">
    			<AppenderRef ref="log_to_console"/>
    			<AppenderRef ref="log_to_file"/>
    		</Root>
    		
    		<logger level="info">
    			<AppenderRef ref="log_to_console"/>
    			<AppenderRef ref="log_to_file"/>
    		</logger>
    
    		<logger level="warn">
    			<AppenderRef ref="log_to_console_two"/>
    		</logger>
    	</Loggers>
    </Configuration>
    

      

      

      

      

  • 相关阅读:
    HDU 2852 KiKi's K-Number (主席树)
    HDU 2089 不要62
    Light oj 1140 How Many Zeroes?
    Bless You Autocorrect!
    HDU 6201 transaction transaction transaction
    HDU1561 The more ,The better (树形背包Dp)
    CodeForces 607B zuma
    POJ 1651 Mulitiplication Puzzle
    CSUOJ 1952 合并石子
    Uva 1599 Ideal path
  • 原文地址:https://www.cnblogs.com/-beyond/p/10102035.html
Copyright © 2011-2022 走看看