log4j2初遇

Log4j 1.xlog4j2.x还是有一些不同的地方,下面做一些简单的使用。首先,下载log4j2.x

http://logging.apache.org/log4j/2.x/download.html 然后解压,下面是2.3的部分jar包。

log4j2初遇

  1. 在项目中导入jar

eclipse中新建一个名为Log4j2java工程,工程名上右键选择属性或者直接alt+enter快捷键。选择Java Build Path

选择Add Library 然后选择User Library 然后next,在选择User Library然后选择new新建一个library

选择Add Extenal Jar,选择下面两个jar包就可以了


然后创建类LogTest如下

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Logger;
 
public class LogTest
{
  private static final Logger logger = (Logger) LogManager.getLogger(LogTest.class);
  public static void main(String[] args)
  {
     logger.info("log4j2 test");
  }
}

运行,报错

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

为什么会报错了,很明显的问题吗?我们连配置文件都没有当然要包配置文件没有找到嘛。

这里先说一说log4j2中的配置的4种方式:

1. 通过一个XMLJSON,YAML的配置文件来配置。

2. 创建一个ConfigurationFactory并且实现Configuration接口。

3. 调用实现了Configuration接口的类,更改默认设置。

4. 调用Loggerd的内部方法。

这里我们只用第一个,通过XML文件来配置Log4j2.

那么问题来了我们的配置文件放在什么地方呢?log4j2怎么找到我们的配置文件呢?我们请教一下发现

官方文档说:log4j启动的时候,会首先找到所有的ConfigurationFactory然后按权重排序。

1.会找系统属性(system property)

2. log4j2-test.yaml或者log4j2-test.yam

3. log4j2-test.json 或者log4j2-test.jsn

4. log4j2-test.xml

5. log4j2.yaml 或者 log4j2.yml

6. log4j2.json 或者log4j2.jsn

7. log4j2.xml

8. 如果以上都没有找到就用默认的DefaultConfiguration

解释一下,system properties就是设置java里的Properties,可以通过System.getProperties();得到。

Log4j2中通过下面的方式设置配置文件的位置

System.setProperty(XmlConfigurationFactory.CONFIGURATION_FILE_PROPERTY,"log4j2.xml");

2~7的文件必须是在classpath路径中的,可以通过

System.out.println(System.getProperty("java.class.path"));来看一看classpath的路径,然后随便放在其中一个就可以了,在eclipse中最简单的就是直接放在项目的bin目录下。

yamljsonxml都可以理解为一种特殊的数据结构,用他们存在和解析数据很方便,有哪一个不知道可以用搜索引擎搜一下。

下面我们来试一试第一种方式:system property的方式。

首先准备一个名为log4j.xmlXML文件。文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>  
    <configuration status="OFF">  
      <appenders>  
        <Console name="Console" target="SYSTEM_OUT">  
          <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>  
        </Console>  
      </appenders>  
      <loggers>  
        <root level="trace">  
          <appender-ref ref="Console"/>  
        </root>  
      </loggers>  
</configuration>

我们先不管文件的意思,先来改一改代码。

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Logger;
import org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory;
 
public class LogTest
{
  private static final Logger logger = (Logger) LogManager.getLogger(LogTest.class);
  public static void main(String[] args)
  {
   System.setProperty(XmlConfigurationFactory.CONFIGURATION_FILE_PROPERTY,"log4j.xml");
     logger.info("log4j2 test");
  }
}

运行一下,还是ERROR StatusLogger No log4j2 configuration file found.他和我杠上了,嗯,让我想一想。

private static final Logger logger = (Logger) LogManager.getLogger(LogTest.class);

看一看这一句,修饰词是static,这意味着在执行main方法时也就是在

System.setProperty(XmlConfigurationFactory.CONFIGURATION_FILE_PROPERTY,"log4j.xml");

之前就已经初始化了logger,所以还是找不到文件也是能够理解的。

我们再改一改,改成下面的样子:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Logger;
import org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory;
 
public class LogTest
{
  static
  {
   System.setProperty(XmlConfigurationFactory.CONFIGURATION_FILE_PROPERTY,"log4j.xml");
  }
  private static final Logger logger = (Logger) LogManager.getLogger(LogTest.class);
  public static void main(String[] args)
  {
//  System.setProperty(XmlConfigurationFactory.CONFIGURATION_FILE_PROPERTY,"log4j.xml");
     logger.info("log4j2 test");
  }
}

是不是就OK了。

现在我们试一试方法7,把log4j.xml文件移动到项目的src或者bin文件夹下,然后程序改为下面的样子:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Logger;
//import org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory;
 
public class LogTest
{
// static
// {
//  System.setProperty(XmlConfigurationFactory.CONFIGURATION_FILE_PROPERTY,"log4j.xml");
// }
  private static final Logger logger = (Logger) LogManager.getLogger(LogTest.class);
  public static void main(String[] args)
  {
//  System.setProperty(XmlConfigurationFactory.CONFIGURATION_FILE_PROPERTY,"log4j.xml");
     logger.info("log4j2 test");
  }
}

运行,什么鬼,又找不到文件,4j2哥不要这样玩我。惹不起,我摇人,找到4j2的文档大哥打听一下,发现他找的是log4j2.xml不是log4j.xml.再改一改文件名,听4j2文档大哥的话,改为log4j2.xml,放在项目的src文件夹下。

OK,搞定,摇人就是管用,像ERROR StatusLogger No log4j2 configuration file found.这个小东西都不敢瞅我了。

参考:

http://logging.apache.org/log4j/2.x/manual/configuration.html

http://stackoverflow.com/questions/19476955/how-to-configure-log4j2-by-runtime-path-working-directory-xml-file-not-classp



你可能感兴趣的:(配置,log4j2)