Log4j2日志配置详解(2)

匿名 (未验证) 提交于 2019-12-03 00:08:02

Log4j2日志配置系列之2

在应用程序代码中插入日志请求需要相当多的计划和工作。观察显示,大约4%的代码用于日志记录。因此,即使是中等大小的应用程序也会在其代码中嵌入数千条日志语句。考虑到日志语句的数量,管理这些日志语句而不需要手动修改它们就变得非常必要。

log4j 2的配置可以通过以下4种方式之一完成:

1.通过xml、json、yaml或properties格式编写的配置文件。

2.以编程方式,通过创建配置工厂和配置实现。

3.以编程方式,通过调用配置接口中公开的api将组件添加到默认配置中。

4.以编程方式,通过调用内部记录器类上的方法。

本页主要关注通过配置文件配置log4j。有关以编程方式配置log4j的信息可以在扩展log4j 2和编程log4j配置中找到。

注意,与log4j 1.x不同,公共log4j 2 api不公开以任何方式添加、修改或删除追加器和过滤器或操作配置的方法

1.Automatic Configuration

log4j能够在初始化期间自动配置自己。当log4j启动时,它将定位所有的ConfigurationFactory插件,并按从高到低的加权顺序排列它们。在交付时,log4j包含四个ConfigurationFactory实现:一个用于json,一个用于yaml,一个用于properties,一个用于xml。


1.log4j将检查“log4j.configuration File”系统属性,如果设置了,将尝试使用与文件扩展名匹配的ConfigurationFactory加载配置。

2.如果未设置系统属性,则属性配置工厂将在类路径中查找log4j2-test.properties。

3.如果没有找到这样的文件,yaml configurationfactory将在类路径中查找log4j2-test.yaml或log4j2-test.yml。

4.如果找不到这样的文件,json配置工厂将在类路径中查找log4j2-test.json或log4j2-test.jsn。

5.如果找不到这样的文件,XML配置工厂将在类路径中查找log4j2-test.xml。

6.如果找不到测试文件,properties configurationfactory将在类路径上查找log4j2.properties。

7.如果找不到属性文件,yaml configurationfactory将在类路径上查找log4j2.yaml或log4j2.yml。

8.如果找不到yaml文件,json配置工厂将在类路径上查找log4j2.json或log4j2.jsn。

9.如果找不到JSON文件,XML配置工厂将尝试在类路径上找到log4j2.xml。

10.如果找不到配置文件,将使用DefaultConfiguration。这将导致日志输出转到控制台。

例如,一个名为myapp的使用log4j的示例应用程序可以用来说明这是如何实现的。

import com.foo.Bar;   // Import log4j classes. import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager;   public class MyApp {       // Define a static logger variable so that it references the     // Logger instance named "MyApp".     private static final Logger logger = LogManager.getLogger(MyApp.class);       public static void main(final String... args) {           // Set up a simple configuration that logs on the console.           logger.trace("Entering application.");         Bar bar = new Bar();         if (!bar.doIt()) {             logger.error("Didn't do it.");         }         logger.trace("Exiting application.");     } }

MyApp首先导入log4j相关类。然后,它定义了一个名为myapp的静态记录器变量,该变量恰好是类的完全限定名。

MyApp 使用packagecom.foo中定义的Bar类。

package com.foo; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager;   public class Bar {   static final Logger logger = LogManager.getLogger(Bar.class.getName());     public boolean doIt() {     logger.entry();     logger.error("Did it again!");     return logger.exit(false);   } }

如果log4j找不到配置文件,它将提供默认配置。default configuration类中提供的默认配置将设置:


连接到根记录器的控制台挂起程序。

已设置为附加到控制台应用程序的模式%d{hh:mm:ss.sss}[%t]-5级%logger{36}-%msg%n”的PatternLayout

注意,默认情况下,log4j将根记录器分配给level.error。

myapp的输出类似于:

17:13:01.540 [main] ERROR com.foo.Bar - Did it again! 17:13:01.540 [main] ERROR MyApp - Didn't do it.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!