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>