日志解决方案
------------------------------------------------------------------------------------------------
一、org.apache.commons.logging.Log方案 (JCL方案)
二、slf4j方案
SLF4J和JCL的由来
------------------------------------------------------------------------------------------------
Java 世界里有许多实现日志功能的工具,最早得到广泛使用的是 log4j,许多应用程序的日志部分都交给了 log4j,不过作为开发者,希望自己的程序不要紧紧依赖某一个日志组件,假如一个应用程序用到了两个不同的日志组件,那么应用程序就会有两份日志输出,这可不是想要的结果。
为了解决这个问题,Apache Commons Logging (之前叫 Jakarta Commons Logging,JCL)出现了,JCL 只提供日志接口,具体的日志实现则在运行时动态寻找。这样一来开发者只需要针对 JCL 日志接口进行日志操作,而应用程序则可以在运行时动态选择自己喜好的日志组件。
所以即使到现在你仍会看到很多程序应用 JCL + log4j 这种搭配,不过当程序规模越来越庞大时,JCL的动态绑定并不是总能成功,具体原因大家可以 Google 一下,这里就不再赘述了。解决方法之一就是在程序部署时静态绑定指定的日志工具,这就是 SLF4J 产生的原因。
SLF4J提供的jar包在非常多,如下图,本文详细说一说用途
SLF4J是一套日志接口,不是实现。通过转换器可以使用Log4j,JDK Logging,Apache Commons-logging,slf4j-nop等日志实现(组件)。跟 JCL 一样,SLF4J 也是只提供 log 接口,具体的实现是在打包应用程序时所放入的绑定器(名字为 slf4j-XXX-version.jar)来决定,XXX 可以是 log4j12, jdk14, jcl, nop 等,他们实现了跟具体日志工具(比如 log4j)的绑定及代理工作。举个例子:如果一个程序希望用 log4j 日志工具,那么程序只需针对 slf4j-api 接口编程,然后在打包时再放入 slf4j-log4j12-version.jar 和 log4j.jar 就可以了。
slf4j+log4j的使用(常规)
--------------------------------------------
使用log4j做为底层日志工具,需要3个jar包:
slf4j-api-x.x.x.jar
slf4j-log4j12-x.x.x.jar
log4j-1.2.xx.jar
下载地址:
http://logging.apache.org/log4j/1.2/download.html
http://www.slf4j.org/download.html
slf4j+logback的使用(常规)
--------------------------------------------
一、logback介绍:
Logback是由log4j创始人设计的又一个开源日志组件。
Logback 分为三个模块:logback-core,logback-classic,logback-access
logback-core 是核心;
logback-classic 改善了 log4j,且自身实现了 SLF4J API,所以即使用 Logback 你仍然可以使用其他的日志实现,如原始的 Log4J,java.util.logging 等;
logback-access 让你方便的访问日志信息,如通过 http 的方式。
下载地址:
slf4j:http://www.slf4j.org/download.html
logback:http://logback.qos.ch/download.html
二、依赖的jar包
需要的配置文件和组件包,下面三个 jar 文件和一个 xml文件都是要放在项目的 ClassPath上
slf4j-api-1.6.1.jar
logback-classic-0.9.24.jar (logback-classic自身实现了 SLF4J API)
logback-core-0.9.24.jar
三、logback配置文件
[粘贴配置文件]
xxx-over-slf4j 桥接器
------------------------------------------------------
现在还有一个问题,假如:
1、你正在开发应用程序的其它依赖包已使用了 JCL日志方案 ;
2、你正在开发应用程序的其它依赖包已使用了 java.util.logging;
3、你正在开发应用程序的其它依赖包已使用了 log4j;
现在你想统一日志方案,统一使用SLF4J。这时你需要一个桥接器(名字为 XXX-over-slf4j.jar)把他们的日志输出重定向到 SLF4J,所谓的桥接器就是一个假的日志实现工具,比如当你把 jcl-over-slf4j.jar 放到 CLASS_PATH 时,即使某个组件原本是通过 JCL 输出日志的,现在却会被 jcl-over-slf4j “骗到”SLF4J 里,然后 SLF4J 又会根据绑定器把日志交给具体的日志实现工具。
假如在 CLASS_PATH 里同时放置 log4j-over-slf4j.jar 和 slf4j-log4j12-version.jar 会发生什么情况呢?没错,日志会被踢来踢去,最终进入死循环。
slf4j+log4j的使用(兼容旧日志输出实现)
------------------------------------------------------
使用 SLF4J+log4j 的比较典型搭配就是把 slf4j-api、JCL 桥接器、java.util.logging(JUL)桥接器、log4j 绑定器、log4j 这5个 jar 放置在 CLASS_PATH 里。
slf4j-api-1.5.10.jar
jcl-over-slf4j-1.5.10.jar
jul-to-slf4j-1.5.10.jar
slf4j-log4j12-1.5.10.jar log4j 绑定器
log4j-1.2.14.jar log4j日志组件,日志输出实现
SLF4J+logback的使用(兼容旧日志输出实现)
------------------------------------------------------
使用 SLF4J+logback 的比较典型搭配就是把 slf4j-api、JCL 桥接器、java.util.logging(JUL)桥接器、log4j桥接器、 logback日志实现 这6个 jar 放置在 CLASS_PATH 里。
slf4j-api-1.6.1.jar
log4j-over-slf4j-1.6.1.jar
jcl-over-slf4j-1.6.1.jar
jul-to-slf4j-1.6.1.jar
logback-classic-0.9.27.jar (logback-classic自身实现了 SLF4J API)
logback-core-0.9.27.jar 日志组件,日志输出实现
Google AppEngine
------------------------------------------------------
不过并不是所有APP容器都是使用 log4j 的,比如 Google AppEngine 它使用的是 java.util.logging(JUL),这时应用 SLF4J 的搭配就变成 slf4j-api、JCL桥接器、logj4桥接器、JUL绑定器这4个 jar 放置在 WEB-INF/lib 里。
参见
----------------------------------------------------
java日志,需要知道的几件事(commons-logging,log4j,slf4j,logback)
http://www.iteye.com/topic/934593
log4j logback slf4j项目配置中的简单总结
http://www.iteye.com/topic/345924
Log4J diy手册
http://blog.csdn.net/cuker919/article/details/5708775
相关推荐
---02-java日志体系概述.mp4 ---03-系统日志与log4j日志简介.mp4 ---04-log4j实例代码展示.mp4 ---05-jul的诞生与代码展示.mp4 ---06-jcl的历史背景与简介.mp4 ---07-jcl面向接口代码风格展示.mp4 ---08-jcl的优缺点...
---02-java日志体系概述.mp4 ---03-系统日志与log4j日志简介.mp4 ---04-log4j实例代码展示.mp4 ---05-jul的诞生与代码展示.mp4 ---06-jcl的历史背景与简介.mp4 ---07-jcl面向接口代码风格展示.mp4 ---08-jcl的优缺点...
1. **JAVA日志体系概述** Java日志框架的发展历程中,涌现出了许多知名的组件,例如log4j、logback、log4j2以及Java内置的日志API(java.util.logging,简称JUL)。这些框架各有特点,选择哪一种通常取决于项目需求...
#### 总体方案概述 该统一监控平台主要关注于**日志监控**、**方法监控**、**调用链路监控**三大核心领域,并结合先进的大数据技术如Flume、Kafka、Spark和Elasticsearch,以确保高效、准确的数据采集与分析能力。...
Java API 概述 Java API 是 Elasticsearch 提供的客户端库,允许开发者在 Java 应用中直接操作 Elasticsearch。主要包括以下组件: - **TransportClient**:通过 TCP 连接直接与 Elasticsearch 节点通信,适用于...
【Java增删改查技术方案】是针对Java应用程序中对数据库进行基本操作(添加、删除、修改和查询)的一种通用模板设计。这个方案旨在提高开发效率,降低代码维护难度,并确保对数据库操作的灵活性和可扩展性。 1. **...
Log4j是由Apache组织开发的一款用于Java的日志组件,旨在为应用程序提供灵活且高效的日志处理能力。它支持多种日志级别,如DEBUG、INFO、WARN、ERROR和FATAL,使得开发者可以根据需要控制日志输出的详细程度。 2. ...
Java Service Wrapper 是一种可以将 Java 应用程序发布为可安装的服务的解决方案,它提供了一种简单的方式来将 Java 应用程序打包成一个独立的服务。下面是 Java Service Wrapper 使用总结的详细说明: 概述 Java ...
#### 三、Java读取DXF文件概述 根据给定的代码片段,可以看出这是一个简单的Java程序,用于读取一个名为`Worldmap`的对象中的DXF文件信息。下面我们将对这个程序进行逐行解析,并解释其工作原理。 #### 四、代码...
**Java日志记录库概述** 在Java开发中,日志记录是不可或缺的一部分,它帮助开发者追踪应用程序的行为,诊断错误,以及进行性能分析。"Logging:简单的Java日志记录库" 提供了一个轻量级的日志解决方案,旨在简化...
### 关于Kettle转换、作业日志自动配置的解决方案 #### 概述 在实际的项目开发过程中,Kettle作为一种广泛使用的数据集成工具,在数据处理和ETL(Extract, Transform, Load)流程中发挥着重要作用。然而,在使用...
Java网上在线支付是一种复杂而关键的...通过这个在线支付的教学视频,观众将有机会深入探索这些主题,逐步建立起一套完整的Java在线支付解决方案。无论是初学者还是经验丰富的开发者,都能从中受益,提升自己的技能。
#### 一、Java项目实战概述 Java项目实战是学习Java编程语言过程中非常重要的一个环节。通过实际项目的开发,不仅能够加深对Java基础知识的理解,还能掌握如何运用这些知识来解决实际问题。对于从零开始的初学者而言...
为了更好地解决这些问题,本文将基于一系列链接资源,探讨不同方面的Java知识点及其应用场景,为开发者提供实用的解决方案。 #### 1. 使用XML配置Log4j - **知识点概述**:Log4j是一款开源的日志框架,它支持定制...
在日常的运维工作中,Tomcat作为一款广泛使用的Java应用服务器,其日志管理尤为重要。特别是在生产环境中,随着系统的持续运行,日志文件(如`catalina.out`)可能会不断增大,甚至达到GB级别。这不仅增加了查找和...
【Java蜘蛛牌游戏项目概述】 本项目是一款基于Java语言实现的蜘蛛牌游戏,适用于Java课程设计或毕业设计,旨在帮助学生提升对Java编程的理解和应用能力。该项目的特点是无需额外配置,下载后即可直接运行,这表明...
1. **项目概述**:在PPT的开头,通常会有一个项目概述的部分,包括项目名称、开发团队、指导教师以及项目背景。这部分旨在简明扼要地介绍项目的来源和目标。 2. **需求分析**:这一部分将详细阐述项目的需求,包括...