1、基本介绍Log4j
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输出地;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
log4j的好处在于:
1) 通过修改配置文件,就可以决定log信息的目的地——控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等
2) 通过修改配置文件,可以定义每一条日志信息的级别,从而控制是否输出。在系统开发阶段可以打印详细的log信息以跟踪系统运行情况,而在系统稳定后可以关闭log输出,从而在能跟踪系统运行情况的同时,又减少了垃圾代码(System.out.println(......)等)。
3) 使用log4j,需要整个系统有一个统一的log机制,有利于系统的规划。
那么是不是这样,我们就可以完全使用log4j,而不需要扩展定制了呢?当然不是这样,因为每个项目的需求不一样,而且log4j本身也提供了灵活的扩展机制。下面我们说说log4j常用的扩展方式。
2、扩展点Log4j
2.1 自己的日志系统
每一个项目都想有自己的一套日志系统,而不受其他项目、jar包的影响。所以日志系统需要独立存在,且有相应的自己单独的配置文件而不受影响。我们先来看看common-logging和log4j的默认工作流程:
common-logging
当我们用Log log = LogFactory.getLog(“loggerName”);取得log时,让我们看看他是如何工作的?
1)、首先在classpath下寻找自己的配置文件commons-logging.properties,如果找到,则使用其中定义的Log实现类
2)、如果找不到commons-logging.properties文件,则在查找是否已定义系统环境变量org.apache.commons.logging.Log,找到则使用其定义的Log实现类
3)、查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类
4)、使用JDK自身的日志实现类(JDK1.4以后才有日志实现类)
5)、使用commons-logging自己提供的一个简单的日志实现类SimpleLog
commons-logging总是能找到一个日志实现类,并且尽可能找到一个"最合适"的日志实现类.
.可以不需要配置文件
.自动判断有没有Log4j包,有则自动使用之
.最悲观的情况下也总能保证提供一个日志实现(SimpleLog)
log4j
当我们用Logger.getLogger(loggerName);取得log时,让我们看看他是如何工作的?
1)、查找是否已定义系统环境变量log4j.configuration,找到则使用其定义的Log配置文件;否则搜索log4j.xml,如果存在,则执行4)
2)、如果不存在,搜索log4j.properties
3)、如果不存在,则使用程序默认的日志仓库
4)、如果存在,注册配置日志仓库
5)、去日志仓库中查询,如果不存在,则new一个
从上面我们可以看到无论是common-logging还是log4j,以及其他的日志开源系统都会提供一套默认的遍历规则,去搜索他的log记录实例。
http://weibeinan2006.blog.163.com/blog/static/5699645920086923422704/
分享到:
相关推荐
log4j.jar以及common-logging.jar两个jar文件全在这个log压缩包中
common-logging是apache提供的一个通用的日志接口。用户可以自由选择第三方的...使用它的好处就是,代码依赖是common-logging而非log4j, 避免了和具体的日志方案直接耦合,在有必要时,可以更改日志实现的第三方库。
本资料共包含以下附件: log4j.jar common-logging.jar 两个jar文件
NULL 博文链接:https://andychen214.iteye.com/blog/401642
NULL 博文链接:https://wwwzhouhui.iteye.com/blog/391950
我用maven + spring mvc +JDBCTEMPLATE + 由Slf4j实现Common-Logging+Log4j的日志控制 (数据库用MySQL)简单编写的注册功能模块 附:项目搭建中的完整步骤和说明
完整common-logging库文件,jar包,配置Eclipse开发很多项目必须添加的依赖。懂的人都知道的!
**log4j-api-2.x 和 log4j-core-2.x是必须的,其他包根据需要引入, Common Logging Bridge: log4j-jcl-2.3 Log4j 2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步、等等),使得日志的吞吐量、性能...
用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。当然,common-logging内部有一个Simple logger的...
NULL 博文链接:https://aselidy.iteye.com/blog/2215717
Commons Logging (JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的... Because we use commons-logging you are free to choose your logging implementation (Log4j is a common choice).
log4j.properties ,commons-logging-1.2.jar,log4j-1.2.16.jar,三个文件一起组成一个完整的日志输出,Apache的Common Logging只是一个高层的日志框架,本身并没有实现真正的写日志能力,而是依赖其它的日志系统如...
commons-logging-1.0.4.jar可以引入: org.apache.commons.logging.Log,org.apache.commons.logging.LogFactory等,用于写日志。 免费送,只要1积分
java企业门户开源Common.Logging .NET 项目构建状态 *注意:由于代码覆盖工具 (NCover) 在我们选择的 CI 服务器平台 (Appveyor) 上的测试运行期间无法可靠地连接到测试运行器的问题,构建可能会定期失败。 工作继续...
java连接jdbc使用到的13个jar包:commons-logging-1.0.4,hadoop_fat,hadoop-common-2.0.0-cdh4.7.0,hive-...libfb303-0.9.0,libthrift-0.9.0-cdh4-1,log4j-1.2.16,slf4j-api-1.6.1,slf4j-api-1.6.4,slf4j-log4j12-1.6.1
NULL 博文链接:https://raozhiyong11.iteye.com/blog/1485880
包含hadoop平台Java开发的所有所需jar包,例如activation-...slf4j-log4j12-1.7.25.jar snappy-java-1.0.5.jar stax-api-1.0-2.jar stax2-api-3.1.4.jar woodstox-core-5.0.3.jar xmlenc-0.52.jar zookeeper-3.4.9.jar
通用日志站点用于Sitecore.Logging.dll的Common.Logging适配器(log4net v1.2.0.30714 aka Beta8)请参见以获取基础项目。 自Sitecore 6.6.0修订版120918以来,Sitecore.Logging.dll尚未更改,它包装了非常旧的log4...
common-2.1.0.jar,hive-jdbc-0.13.1.jar,hive-service-1.1.0.jar,httpclient-4.5.3.jar,httpcore-4.4.6.jar,libthrift-0.9.2.jar,log4j-1.2.17.jar,slf4j-api-1.5.0.jar,slf4j-log4j12-1.5.0.jar等jar包
spring开发,或者tomcat开发中需要添加日志包,此中包含了 common-logging.jar,log4j-1.2.17.jar, log4j-core-2.2.jar 众多jar包。