• 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>
    

      

      

      

      

  • 相关阅读:
    底层因为接受到操作系统信号而停止的解决
    C语言判断文件是否存在
    Linux磁盘设备文件(sda,sdb,sdc…)变化问题
    linux mysql 数据目录文件夹移动及所遇到的问题
    Linux Mysql如何移动MySQL数据库目录位置
    Linux 磁盘挂载和mount共享
    提高VS2010/VS2012编译速度
    C++[类设计] ini配置文件读写类config
    WIN32读写INI文件方法
    MS509Team----------------Cknife
  • 原文地址:https://www.cnblogs.com/-beyond/p/10102035.html
Copyright © 2020-2023  润新知