Java log日志小记,备忘。
其实commons-logging中默认都支持Log4j,因此只要同时加载commons-logging包和log4j包,可以不用配置即可用在应用中使用commons-logging的接口方法。
当然,标准的应用的是需要的配置,如果你log4j则这个配置是可选的。下面我说明如何通过配置文件来组合commons-logging和log4j。
配置文件内容很简单,就指定一个日志实现类即可,下面是个示例文件:
commons-logging.properties
--------------------------------------------------------------------------------
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
1、Apache通用日志接口(commons-logging.jar)介绍
Apache Commons包中的一个,包含了日志功能,必须使用的jar包。这个包本身包含了一个Simple Logger,但是功能很弱。在运行的时候它会先在CLASSPATH找log4j,
如果有,就使用log4j,如果没有,就找JDK1.4带的 java.util.logging,如果也找不到就用Simple Logger。commons-logging.jar的出现是一个历史的的遗留的遗憾
,当初Apache极力游说Sun把log4j加入JDK1.4,然而JDK1.4项目小组已经接近发布JDK1.4产品的时间了,因此拒绝了Apache的要求,
使用自己的java.util.logging,这个包的功能比log4j差的很远,性能也一般。后来Apache就开发出来了commons-logging.jar用来兼容两个logger。
因此用 commons-logging.jar写的log程序,底层的Logger是可以切换的,你可以选择log4j,java.util.logging或者它自带的Simple Logger。
不过我仍然强烈建议使用log4j,因为log4j性能很高,log输出信息时间几乎等于System.out,而处理一条log平均只需要5us。
2、Log4J介绍
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、
NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
3、SLF4j介绍
准确的说,slf4j并不是一种具体的日志系统,而是一个用户日志系统的facade,允许用户在部署最终应用时方便的变更其日志系统。
3.1、使用方式:
在系统开发中,统一按照slf4j的API进行开发,在部署时,选择不同的日志系统包,即可自动转换到不同的日志系统上。
比如:选择JDK自带的日志系统,则只需要将slf4j-api-1.5.10.jar和slf4j-jdk14-1.5.10.jar放置到classpath中即可,
如果中途无法忍受JDK自带的日志系统了,想换成log4j的日志系统,仅需要用slf4j-log4j12-1.5.10.jar替换slf4j- jdk14-1.5.10.jar即可(当然也需要log4j的jar及配置文件)
3.2、使用场景:
我们开发的是类库或者嵌入式组件,可以考虑使用slf4j,因为我们并不能决定用户选择哪种日志系统(不同软件开发公司会钟情于不同的日志系统);
但是如果我们开发独立应用,面向的是最终客户,则无需考虑slf4j,因为最终客户只关心功能实现,不会在意开发公司具体使用什么日志系统的。
Reference:
http://commons.apache.org/logging/guide.html#Configuring Log4J
http://shift8.iteye.com/blog/1316802
http://www.onelee.org/wordpress/?p=78
http://zhangjunhd.blog.51cto.com/113473/25135
http://lavasoft.blog.51cto.com/blog/62575/26134