Log4J2.3版本简单测试验证

时间:2021-07-26 21:49:39


Log4J2.3简介

Log4J2.3版本是老的Log4J的升级版本,修复了老版本的一些BUG,并在很多功能上进行优化和提升,增加了诸如异步等功能。具体可以参照Log4J2的apach网站说明,http://logging.apache.org/log4j/2.x/

做了个简单的例子

下载当前最新版本的Log4J2.3,然后解压。

创建Eclipse工程,并在工程classpath中增加Log4J的JAR文件,注意:只增加log4j-api-2.3.jar,log4j-core-2.3.jar两个jar文件,否则在运行测试类时,系统会报错:

     [java] Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j
/Logger
[java] at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLo
ggerContext.java:41)
[java] at org.apache.logging.log4j.LogManager.getLogger(LogManager.java
:492)
[java] at com.zy.antDemo.HelloWorld.main(Unknown Source)
[java] Caused by: java.lang.ClassNotFoundException: org.slf4j.Logger
[java] at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
[java] at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[java] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)

[java] at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[java] ... 3 more

主要是由于Log4J2.3目录中还存在其他jar包,Log4J认为你需要借助SLF4J来完成日志操作,因此会加载SLF4J的类。

编写测试类

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;


public class HelloWorld {

public static void main(String[] args) {
Logger logger = LogManager.getLogger(HelloWorld.class.getName());
// TODO Auto-generated method stub
logger.info("hello world");
}

}

执行后,控制台出现如下信息:

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

这是由于Log4J没有找到配置文件出现的提示。需要说明的是,在新版的log4J功能中,如果程序没有提供配置文件或者Log4J没有在相应位置找到配置文件,则Log4J会使用系统缺省配置。

编写Log4J配置文件

<?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="info">
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>

放在src目录下

再次执行HelloWorld类,系统显示

     [java] 18:44:28.360 [main] INFO  com.zy.antDemo.HelloWorld - hello world

执行成功。


当然,新版Log4J还有很多功能,还需要深入研究。

为了装逼,自己编写了ant脚本执行验证过程,纯粹为了学习ant,见笑。

<?xml version="1.0" encoding="UTF-8" ?>

<project name="ant demo" basedir="." default="java">
<description>
ant demo
</description>
<property name="srcdir" value="src"/>
<property name="buildDir" value="build"/>

<target name="setup" depends="clean">
<mkdir dir="${buildDir}"/>
</target>

<target name="clean">
<delete dir="${buildDir}"></delete>
</target>

<target name="copyFile">
<copy todir="${buildDir}">
<fileset dir="${srcdir}">
<include name="**/*.xml"/>
</fileset>
</copy>
</target>

<target name="javac" depends="setup">
<javac id="compile" verbose="true" fork="true" srcdir="${srcdir}" destdir="${buildDir}">
<include name="**/*.java"/>
<classpath>
<fileset dir="E:\\java\\lib\\apche\\log4j2\\apache-log4j-2.3-bin">
<include name="**/log4j-api-2.3.jar"></include>
<include name="**/log4j-core-2.3.jar"></include>
</fileset>
</classpath>
</javac>
</target>

<target name="java" depends="javac,copyFile">
<java fork="true" classname="com.zy.antDemo.HelloWorld">
<classpath>
<pathelement path="${buildDir}"/>
<fileset dir="E:\\java\\lib\\apche\\log4j2\\apache-log4j-2.3-bin">
<include name="**/log4j-api-2.3.jar"></include>
<include name="**/log4j-core-2.3.jar"></include>
</fileset>
</classpath>
</java>
</target>
</project>