`

日志组件的关系梳理:如何正确使用它们

    博客分类:
  • Java
 
阅读更多

背景 
    由于现在开源框架日益丰富,好多开源框架使用的日志组件不尽相同。为防止日志输出混乱,需统一处理。下图是各个日志框架的关系:


从上图中,我们可以看到4部分。 
接口:将所有日志实现适配到了一起,用统一的接口调用。 
实现:目前主流的日志实现 
旧日志到slf4j的适配器:如果使用了slf4j,但是只想用一种实现,想把log4j的日志体系也从logback输出,这个是很有用的。 
slf4j到实现的适配器:如果想制定slf4j的具体实现,需要这些包。

 

slf4J与旧日志框架的关系 
slf4j等于commons-logging,是各种日志实现的通用入口,会根据classpath中存在下面哪一个Jar来决定具体的日志实现库。 
logback-classic(默认的logback实现) 
slf4j-jcl.jar(apache commons logging) 
slf4j-logj12.jar(log4j 1.2.4) 
slf4j-jdk14(java.util.logging) 
将所有使用旧式日志API的第三方类库或旧代码的日志调用转到slfj 
jcl-over-slf4j.jar/jcl104-over-slf4j:apache commons logging 1.1.1/1.0.4,直接替换即可。 
log4j-over-slf4j.jar:log4j,直接替换即可。 
jul-to-slf4j:jdk logging,需要在程序开始时调用SLF4JBridgeHandler.install()来注册listener参考JulOverSlf4jProcessor,可在applicationContext.xml中定义该bean来实现初始化。注意原有的log4j.properites将失效,logback网站上提供转换器,支持从log4j.properties 转换到logback.xml 。 

 

转移到logback的理由 
    slf4j支持参数化的logger.error("帐号ID:{}不存在", userId);告别了if(logger.isDebugEnable()) 时代。 
    另外logback的整体性能比log4j也较佳,hibernate等项目已经采用了slf4j:"某些关键操作,比如判定是否记录一条日志语句的操作,其性能得到了显著的提高。这个操作在LOGBack中需要3纳秒,而在Log4J中则需要30纳秒。 LOGBack创建记录器(logger)的速度也更快:13毫秒,而在Log4J中需要23毫秒。更重要的是,它获取已存在的记录器只需94纳秒,而 Log4J需要2234纳秒,时间减少到了1/23。" 

 

完整日志配置:

 

<!-- log -->  
<dependency>  
    <groupId>org.slf4j</groupId>  
    <artifactId>slf4j-api</artifactId>  
    <version>${org.slf4j-version}</version>  
</dependency>  
<dependency>  
    <groupId>org.slf4j</groupId>  
    <artifactId>jcl-over-slf4j</artifactId>  
    <version>${org.slf4j-version}</version>  
</dependency>  
<dependency>  
    <groupId>org.slf4j</groupId>  
    <artifactId>log4j-over-slf4j</artifactId>  
    <version>${org.slf4j-version}</version>  
</dependency>  
<dependency>  
    <groupId>org.slf4j</groupId>  
    <artifactId>jul-to-slf4j</artifactId>  
    <version>${org.slf4j-version}</version>  
</dependency>  
<dependency>  
    <groupId>org.jboss.logging</groupId>  
    <artifactId>jboss-logging</artifactId>  
    <version>3.1.4.GA</version>  
</dependency>  

     加了几个重要的实现适配器,log4j-over-slf4j,log4j-over-slf4j,jul-to-slf4j。然后jboss-logging部分也进行了统一的版本控制。同时删除及exclude掉所有log4j,commons-logging的各个版本。适配器和具体日志实现,不能共存,否则适配器不生效。这样的话,我们只有logback配置文件即可,因为log4j的输出已经委托给了slf4j(通过log4j-over-slf4j),而slf4j的默认实现是logback。 

其中JUL需要额外执行一行初始化代码 :
SLF4JBridgeHandler.install();// jul to slf4j 
 
分享到:
评论

相关推荐

    .Net轻量级简单日志组件

    日志组件位于System.Database.dll中,项目引用命名空间(System.Logger)即可,日志组件提供五种级别的日志记录(DEBUG|INFO|WARN|ERROR|FATAL),最低DEBUG,最高FATAL,当配置的级别大于等于对应级别时,会自动记录...

    日志组件,C#开发的日志组件

    这是一个用C#开发的日志组件,可以自己根据需要重写代码。

    Java简易日志组件

    Java简易日志组件,附配置和示例Demo

    Java组件设计-日志组件

    日志组件日志组件日志组件日志组件日志组件日志组件日志组件日志组件日志组件日志组件日志组件日志组件日志组件日志组件日志组件日志组件日志组件日志组件日志组件

    通用日志记录组件

    整个日志记录的调度全部统一放在公共组件中,使用者只需要构建两个派生类,实现简单灵活,当前只针对写入到文件的日志记录,后面逐步增加到数据库的结构化日志存储接口 * 一个派生类,用于指定其实现的日志记录...

    页面日志组件

    页面日志组件页面日志组件页面日志组件

    .Net轻量级日志组件

    SimpleLogger提供了单实例接口SimpleLogger.GetInstance(),支持多线程并发操作,使用时可直接调用获取日志实例对象。同时各级别日志记录接口(Debug| Info Warn| Error| Fatal)均有不同重载方式。

    android日志组件

    1 将选定的Log日志内容记录到手机的sd卡中,一般便于将测试发现的问题捕获。 2 可以默认或者自定义设置TAG、日志文件夹和日志文件路径、日志容量最大值。 3 最多可生成6个日志文件,1个主日志文件,5个扩展日志文件...

    log日志组件总结

    Java关于log日志组件的详细说明及应用,通过本文档的学习,不仅可以对Java日志组件有更加深一层的认识,还能是自己的只是上一个台阶

    .net日志组件NLog.zip

    NLog是什么?NLog((http://www.nlog-project.org)是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码。NLog完全实现了我们上面的期望目标,并且还远远... 标签:日志组件 log

    .NET日志记录组件

    .NET日志记录组件

    Delphi编写的日志文件记录组件源程序

    Delphi编写的日志记录组件源代码,从中可以学习自定义组件的一些技巧,如注册到组件面板、添加自定义图标等。 日志组件具有以下属性及方法: public { Public declarations } procedure AddLog(p_Info: string); /...

    高性能C 通用日志组件VC-Logger.zip

    可用性: 本日志组件着重考虑了可用性,尽量让使用者用起来觉得简便、舒心: 简单纯净:不依赖任何程序库或框架 使用接口简单,不需复杂的配置或设置工作 提供 CStaticLogger...

    log4pb, pb的日志组件, 后台线程记录日志

    // Description: pb日志组件,把log4pb.pbd, callback.pbd加入到开发的libary列表中 // 1. log4pb调用演示例子, 思想仿log4j // 2. 集成对象到application, // 3. 组件文件: log4pb90.pdb + callback.pbd, // 4. ...

    微服务请求日志统一处理方案

    新建日志组件,日志组件对请求进行拦截处理,输出请求入参、出参。其他各微服务引用日志组件,对日志统一输出 日志组件如下: 工具类 1、新建TimeCostEnum 请求耗时类,用于对请求处理耗时级别定义 package ...

    java常用日志组件介绍

    NULL 博文链接:https://huandieyangyang-126-com.iteye.com/blog/2064313

    日志组件(spring依赖)

    日志组件(spring依赖)。日志组件(spring依赖)。日志组件(spring依赖)。参上。

    C#开发用日志输出&查看组件

    使用C#开发的日志组件,提供五级日志输出功能,并提供便利的日志输出功能 并提供查看日志文件的浏览器,可方便的查询日志信息 如有意见请留言,非常感谢您们的支持!

    log4j日志组件

    log4j日志组件

    NLOG 日志开源组件 visual studio

    NLOG 日志 开源 Visual Studio是一款功能非常强大的打日志开源组件,调用非常方便

Global site tag (gtag.js) - Google Analytics