Log4J与java.util.logging.Logger的使用方式出奇的相似,因此如果先看这篇文章《Java日志工具之java.util.logging.Logger》在来用Log4J简直是水到渠成。
与java.util.logging.Logger的共性与不同
看看Log4J与java.util.logging.Logger的共性和不同吧:
- Log4J也是通过工厂方法获取Logger对象;
- Log4j的的Appender对等于logging.Logger的handler,都有控制台、文件等方式;
- Log4J的Layout对等于logging.Logger的Formatter;
- Log4J和logging.Logger都使用名称空间和继承关系;
- Log4J没有默认的Appender,但可以调用函数
BasicConfigurator.configure()
- Log4J日志级别略有不同:从低到高以此是TRACE,DEBUG,INFO,WARN,ERROR,FATAL;
- Log4J自定义配置文件更方便,因为它有相应的方法:
PropertyConfigurator.configure
不用配置文件的示例
首先来个形象的代码:
package net.oseye; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; public class RunMain { public static void main(String[] args) { BasicConfigurator.configure();//默认配置,设置root的Appender Logger log=Logger.getLogger(RunMain.class); //添加一个Appender log.addAppender(new ConsoleAppender(new PatternLayout())); log.setLevel(Level.TRACE); log.warn("test"); } }
Log4J没有默认的配置文件,所以如果没有给Logger添加Appender会报异常的,示例中设置了root的Appender,别的Logger可以继承root。而实例中又添加了一个自定义的Appender。
输出结果:
test
0 [main] WARN net.oseye.RunMain - test
使用配置文件的示例
package net.oseye; import java.io.File; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; public class RunMain { public static void main(String[] args) { Logger log=Logger.getLogger(RunMain.class); PropertyConfigurator.configure("d:"+File.separator+"log4j.properties"); log.setLevel(Level.TRACE); log.warn("test"); } }
d:log4j.properties配置文件内容如下:
log4j.rootLogger=DEBUG, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
输出:
0 WARN [main] net.oseye.RunMain - test
基本上是不是和java.util.logging.Logge一样,呵呵。了解更多配置文件讲解请看《Log4J配置文件详解》。