注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

让一切都逝去吧

排骨炖泥菜/猪肝炒苹果/鱼籽狗肉汤/狗头薏米汤

 
 
 

日志

 
 

log4j的使用  

2013-09-18 10:01:37|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
      log4j常使用,但详细的使用方法却一直没有整理下。log4j一般跟commons-logging一起使用,commons-logging中Log 是一个接口。LogFactory 装载具体的日志系统,并获得实现该Log 接口的实现类。Log4JLogger 实现类对Log 接口同时内部提供了对log4j logger 的代理。LogFactory 内部装载日志系统流程:
1.   首先,寻找org.apache.commons.logging.LogFactory 属性配置
2.   否则,利用JDK1.3 开始提供的service 发现机制(spi),会扫描classpah 下的META-INF/services/org.apache.commons.logging.LogFactory 文件,若找到则装载里面的配置,使用里面的配置。能找到log4j.xml或log4j.properties也可以
3.   否则,从Classpath 里寻找commons-logging.properties ,找到则根据里面的配置加载。
4.   否则,使用默认的配置:如果能找到Log4j 则默认使用log4j 实现,如果没有则使用JDK14Logger 实现,再没有则使用commons-logging 内部提供的SimpleLog 实现。

Commons-logging+log4j+slf4j
如果在原有commons-logging 系统里,如果要迁移到slf4j, 使用slf4j 替换commons-logging ,也是可以做到的。原理使用到了上述commons-logging 加载的第二点。需要引入Org.slf4j.jcl-over-slf4j-1.5.6.jar 。这个jar 包提供了一个桥接,让底层实现是基于slf4j 。原理是在该jar 包里存放了配置META-INF/services/org.apache.commons.logging.LogFactory =org.apache.commons.logging.impl.SLF4JLogFactory ,而commons-logging 在初始化的时候会找到这个serviceId ,并把它作为LogFactory 。

      其中META-INF/services/的配置,叫做spi。SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现,而后,把新加的实现,描述给JDK知道就行啦。例子看这里:
其中关键内容是,META-INF目录要在classpath下,如果是maven项目,就放在src/main/resources下
META-INF/services/下放的文件遵循:
文件名字为 接口/抽象类: 全名 文件内容: 接口/抽象类 实现类
如果要编码使用,这样:
ServiceLoader<HelloInterface> loaders = 
              ServiceLoader.load(HelloInterface.class);

        for (HelloInterface in : loaders) {
            in.sayHello();
        }
      
      log4j定义每个package下的日志级别,在log4j.logger后面加上包名,如:
log4j.logger.com.xxx=DEBUG
这样就设置了com.xxx包的级别,这样就可以自定义不同包不同的日志级别了。log4j.logger后面还可以跟类名,设置具体类的日志级别。
  评论这张
 
阅读(690)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017