- 浏览: 480994 次
- 性别:
- 来自: 湖南
文章分类
- 全部博客 (201)
- j2ee (43)
- oracle (9)
- mysql (7)
- db2 (1)
- j2se (3)
- spring (1)
- hibernate (3)
- struts (0)
- Berkeley DB (0)
- linux (60)
- Apache2+PHP+MYSQL (2)
- solr (15)
- svn (1)
- IntelliJ Idea (1)
- eclipse,myeclipse (4)
- ant (2)
- vim (8)
- IT生活 (4)
- 测试 (6)
- lucene (4)
- shell (1)
- nutch (18)
- thread (1)
- hadoop (5)
- mapreduce (0)
- Python (4)
- 硬件 (1)
- database (1)
- maven (1)
- 正则表达 (0)
- 互联网 (1)
最新评论
-
youngcoder:
good job
HTTP协议头部与Keep-Alive模式详解 -
javazdq:
受教了 解释的不错。
lucene创建索引高级特性和索引创建参数优化 -
josico:
有几个问题想问下楼主1. LinkedBlockingQueu ...
生产者-消费者-BlockingQueue -
annybz:
有没有关于 BlockingQueue和ConcurrentL ...
生产者-消费者-BlockingQueue -
uniquejava:
多谢,记录的很真实。
DB2 学习记录
原创:庄晓立(liigo
)
2005-8-13
这个……就不必说了吧。
功能太弱;不易于控制。如果暂时不想输出了怎么办?如果想输出到文件怎么办?如果想部分输出怎么
办?……
Commons-loggin
的
目的是为“所有的Java
日志实现”提供一个统一的接口,它自身的日志功能平
常弱(只有一个简单的SimpleLog?
),所以一般不会单独使用它。
Log4j
的功能非常全面
强大,是目前的首选。我发现几乎所有的Java
开源项目都会用到Log4j
,但我同时发现,所有用到Log4j
的项目一般也同时会用到commons-loggin
。
我想,大家都不希望自己的项目与Log4j
绑定的太紧密吧。另外一个我能想到
的“同时使用commons-logging
和Log4j
”的原因是,简化使用和配置。
强调一点,“同时使用commons-logging
和Log4j
”,与“单独使用Log4j
”相比,并不会带来更大的学习、配置和维护
成本,反而更加简化了我们的工作。
我想这也是为什么“所有用到Log4j
的
项目一般也同时会用到commons-loggin
”的原因之一吧。
l
提供一个统一的日志接口,简单了操
作,同时避免项目与某个日志实现系统紧密a
耦合
l
很贴心的帮我们自动选择适当的日志
实现系统(这一点非常好!)
l
它甚至不需要配置
这里看一下它怎么“‘很贴心的’帮我们‘自动选择’‘适当的’日志实现系统”:
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
总
是能找到一个日志实现类,并且尽可能找到一个“最合适”的日志实现类。我说它“很贴心”实际上是因为:1
、可以不需要配置文件;2
、自动判断有没有Log4j
包,有则自动使用之;3
、最悲观的情况下也总能保证提供一个日志实现(SimpleLog
)。
可以看到,commons-logging
对编程者和Log4j
都非常友好。
为了简化配置commons-logging
,
一般不使用commons-logging
的
配置文件,也不设置与commons-logging
相
关的系统环境变量,而只需将Log4j
的Jar
包放置到classpash
中就可以了。这样就很简单地完成了commons-logging
与Log4j
的融合。
如果不想用Log4j
了怎么办?只需将classpath
中
的Log4j
的Jar
包
删除即可。
就这么简单!
我们在需要输出日志信息的“每一人”类中做如下的三个工作:
1
、导入所有需的commongs-logging
类:
import
org.apache.commons.logging.Log;
import
org.apache.commons.logging.LogFactory;
如果愿意简化的话,还可以两行合为一行:
import
org.apache.commons.logging.*;
2
、在自己的类中定义一个org.apache.commons.logging.Log
类的私有静态类成员:
private static Log
log =
LogFactory.getLog(YouClassName.class);
注意这里定义的是static
成
员,以避免产生多个实例。
LogFactory.getLog()
方
法的参数使用的是当前类的class
,这是目前被普通认为的最好的方式。为什
么不写作LogFactory.getLog(this.getClass())
?
因为static
类成员访问不到this
指针!
3
、使用org.apache.commons.logging.Log
类的成员方法输出日志信
息:
log.debug("111");
log.info("222");
log.warn("333");
log.error("444");
log.fatal("555");
这里的log
,就是上面第
二步中定义的类成员变量,其类型是org.apache.commons.logging.Log
,
通过该类的成员方法,我们就可以将不同性质的日志信息输出到目的地(目的地是哪里?视配置可定,可能是stdout
,也可能是文件,还可能是发送到邮件,甚至发送短信到手机……详见下文对log4j.properties
的介绍):
l
debug()
输出“调试”级别的日志信息;
l
info()
输出“信息”级别的日志信息;
l
warn()
输出“警告”级别的日志信息;
l
error()
输出“错误”级别的日志信息;
l
fatal()
输出“致命错误”级别的日志信息;
根据不同的性质,日志信息通常被分成不同的级别,从低到高依次是:“调试(DEBUG
)”“信息(INFO
)”“警告(WARN
)”“错误(ERROR
)”“致命错误(FATAL
)”。
为什么要把日志信
息分成不同的级别呢?这实际上是方便我们更好的控制它。比如,通过Log4j
的
配置文件,我们可以设置“输出‘调试’及以上级别的日志信息”(即“调试”“信息”“警告”“错误”“致命错误”),这对项目开发人员可能是有用的;我们
还可以设置“输出“警告”及以上级别的日志信息”(即“警告”“错误”“致命错误”),这对项目最终用户可能是有用的。
仅从字面上理解,也可以大致得出结论:最常用的应该是debug()
和info()
;而warn()
、error()
、fatal()
仅
在相应事件发生后才使用。
从上面三个步骤可以看出,使用commons-logging
的
日志接口非常的简单,不需要记忆太多东西:仅仅用到了两个类Log, LogFactory
,
并且两个类的方法都非常少(后者只用到一个方法,前者经常用到的也只是上面第三步中列出的几个),同时参数又非常简单。
上面所介绍的方法是目前被普通应用的,可以说是被标准化了的方法,几乎所有的人都是这么用。如果不信,
或想确认一下,就去下载几个知名的Java
开源项目源代码看一下吧。
下面给出一个完整的Java
类
的代码:
package
liigo.testlog;
import
org.apache.commons.logging.Log;
import
org.apache.commons.logging.LogFactory;
public class
TestLog
{
private static Log log =
LogFactory.getLog(TestLog.class);
public void test()
{
log.debug("111");
log.info("222");
log.warn("333");
log.error("444");
log.fatal("555");
}
public static void main(String[] args)
{
TestLog testLog = new TestLog();
testLog.test();
}
}
只要保证commons-logging
的jar
包在classpath
中,
上述代码肯定可以很顺利的编译通过。那它的执行结果是怎么样的呢?恐怕会有很大的不同,请继续往下看。
应该注意到,我们上面给出的源代码,完全没有涉及到Log4j
——这正是我们所希望的,这也正是commons-logging
所
要达到的目标之一。
可是,怎么才能让Log4j
发
挥它的作用呢?答案很简单,只需满足“classpath
中有Log4j
的jar
包”。
前面已经说过了,commons-logging
会自动发现并应用Log4j
。所以只要它存在,它就发挥作用。(它不存在呢?自然就不发挥作用,commons-logging
会另行选择其它的日志实现类。)
注意:配置文件log4j.properties
对Log4j
来说是必须的。如果classpath
中没有该配置文件,或者配置不对,将会引发运行时异常。
这样,要正确地应用Log4j
输出日志信息,log4j.properties
的作用就很重要了。好在该文件有通用的模板,复制一份
(稍加修改)就可以使用。几乎每一个Java
项目目录内都会有一个log4j.properties
文件,可下载几个Java
开源项目源代码查看。本文最后也附一个模板性质的log4j.properties
文件,直接复制过去就可以用,或者根据自己的需要稍加修改。后文将会log4j.properties
文件适当作一些介绍。
这里顺便提示一点:如果不用commons-logging
,
仅仅单独使用Log4j
,操作上反而要稍微麻烦一些,因为Log4j
需要多一点点的初始化代码(相比commons-logging
而言):
import
org.apache.log4j.Logger;
import
org.apache.log4j.PropertyConfigurator;
public class
TestLog4j {
static Logger logger = Logger.getLogger(TestLog4j.class); //First step
public static void main(String args[]) {
PropertyConfigurator.configure("log4j.properties");
//Second step
logger.debug("Here is some DEBUG"); //Third step
logger.info("Here is some INFO");
logger.warn("Here is some WARN");
logger.error("Here is some ERROR");
logger.fatal("Here is some FATAL");
}
}
不过也就多出一行。但这至少说明,引用commons-logging
并
没有使问题复杂化,反而简单了一些。在这里1+1
就小于2
了。这也验证了前面的结论。
将commons-logging
和Log4j
的jar
包
都放置到classpath
下,同时也将Log4j
的配置文件放到classpath
中,
两者就可以很好的合作。
采用Log4j
配合commons-logging
作为日志系统,是目前Java
领域非常非常流行的模式,使用非常非常的普遍。两者的结合带来的结果就是:简单 +
强大。
commons-logging
提
供了简捷、统一的接口,不需要额外配置,简单;
Log4j
功能非常全面、
强大;
commons-logging
仅
仅对Log4j(
当然还包括其它LOG
实现)
作了一层包装,具体的日志输出还
是在内部转交给身后的Log4j
来处理;而Log4j
虽然做了所有的事情,却甘作绿叶,从不以真身示人。
两者堪称绝配。
下面对log4j.properties
文
件内容作一点点介绍,以后文所附log4j.properties
文件为例:
除去以#
开头的注释以及空
行,第一行有用的内容是:
log4j.rootLogger
= DEBUG, CONSOLE,A1
log4j.rootLogger
是
最最重要的一个属性了,它定义日志信息的“输出级别”和“输出目的地”。
关键看“=
”后面的值,“DEBUG, CONSOLE,A
1
”这
里我们要把它分成两部分:第一个逗号之前的是第一部分,指定“输出级别”;后面的是第二部分,指定“输出目的地”。可以同时指定多个“输出目的地”,以逗
号隔开。
具体到上面这一行:它指定的“输出级别”是“DEBUG
”;它指定的“输出目的地”是“CONSOLE
”和“A1
”。
注意:
l
“输出级别”有可选的五个值,分别
是DEBUG
、INFO
、WARN
、ERROR
、FATAL
,它们是由Log4j
系
统定义的。
l
“输出目的地”就是我们自己定义的
了,就在log4j.properties
的后面部分,此文件定义的“输出目
的地”有CONSOLE
、FILE
、ROLLING_FILE
、SOCKET
、LF5_APPENDER
、MAIL
、DATABASE
、A1
、im
。
该文件之所以可作主模板,就是因为它比较全面地定义了各种常见的输出目的地(控制台、文件、电子邮件、数据库等)。
好,下面详细解释“log4j.rootLogger=DEBUG,
CONSOLE,A
1
”这一行:
l
指定“输出级别”是“DEBUG
”,即,仅输
出级别大于等于
“调试(DEBUG
)”的
日志信息
。如果此处指定的是“WARN
”则仅调用warn()
、error()
、fatal()
方法输出的日志信息才被输出到“输出目的地”,而调用debug()
、info()
方
法输出的日志信息不被输出到“输出目的地”。明白了吗?Log4j
就是以这种
方式来过滤控制日志信息的输出与否,这也是对日志信息进行级别分类的目的。
l
指定“输出目的地”是“CONSOLE
”和“A1
”,即,将指定的日志信息(根据日志级别已进行了过滤)同时输出到的“控制台”和“SampleMessages.log4j
文件”。
为什么说“CONSOLE
”
表示将日志信息输出到“控制台”呢?那就要看一下后文的定义了:
#
应用于控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework]
%d - %c -%-4r
[%t] %-5p %c %x - %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]
n%c[CATEGORY]%n%m[MESSAGE]%n%n
为什么说“A1
”表示将日
志信息输出到
“SampleMessages.log4j
文
件”呢?还要看后文的定义:
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
注意:这里的定义没有指定输出文件的路径,它的路径实际上是
java.user.path
的值。
您应该已经注意到,在定义“输出目的地”时,还可以指定日志格式、时间、布局等相关信息。略过。
好了,我可以根据需要,将这一行修改为:
log4j.rootLogger
= ERROR, CONSOLE,FILE,MAIL
将“错误(ERROR
)”
及“致命错误(FATAL
)”级别的日志信息同时输出到控制台、文件,并且发
电子邮件向系统管理员报告。是不是很爽?(如果将“调试(DEBUG
)”级别
的日志信息邮件给管理员,恐怕迟早会把他/
她的邮箱涨爆,哪怕用的是Gmail
!再次理解了“将日志信息分为不同级别”的意图了吧?)
##Log4J
的配置之简
单使它遍及于越来越多的应用中了
##Log4J
配置文件实
现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。择其一二使用就够用了。
##
此文件(log4j.properties
)
内容来自网络,非本文作者liigo
原创。 #
应用于控制台
#
应用于文件 #
应用于socket
#
发送日志给邮件 #
用于数据库 #
自定义Appender
Log即日志,可用于程序监控及调试,当然我们也可以用System.out.println()
来
打印,可System.out.println()功能太弱,且不易于控制,且在程序代码量
较多时如不想输出时,删除这个语句的话只能是耗时耗力
,且如想将日志输出到别的地方,比如说文件,或是部分输出,System.out.println()就会无能为力了.
关于Commons-loggin +
Log4j结合的使用方法网上文章较多,也比较简单,我这里后面有附摘录的认为写得较好的文章
下面列出我在
应用中碰到的
问
题
问题1:
commons-logging.properties
文件中
有设定
org.apache.commons.logging.Log=org.apache.commons.logging.impl
.Log4JLogger
可修改 log4j.properties
中的log4j.rootLogger=ERROR
,CONSOLE,A1改变输出级别,日志输出时一直是一样
没什么变化
解决方法:
出现上述现象的是因为:common-loggin.properties版本过低,commons logging jar中的
org.apache.commons.logging.impl包根本没有
Log4jLogger这个类,所以只要
升级
commons logging
就可以解决问题
问题2:
Commons-loggin + Log4j
升级版本后,原先编译通过的程序现在却会弹出
Log方面的异常
解决方法:
将 commons-logging.properties
文件中的
org.apache.commons.logging.Log=org.apache.commons.logging.impl
.Log4JCategoryLog
或
是Log4jFactory
改为
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
即可解决上述问题
另外介绍下小技巧:
在log4j.properties我们让日志使用文件输出方式(日志文件名.log),没有指明路径。
可以用下边这行语句找到日志文件的位置,也就是user.dir
System.out.println(System.getProperty("user.dir"));
commons-
logging.properties和log4j.properties要位于class应用的目录,
可以用下边这行语句找到class的位置
//System.out.println(System.getProperty("java.class.path"));
以
下是我在网上找到的一篇比较好的关于Commons-logging + Log4j文章
Commons-logging + Log4j 入门指南
为什么要用日志(Log
)?
为什么不用System.out.println()?
为什么同时使用commons-logging
和Log4j?
为什么不仅使用其中之一?
Commons-logging
能帮我们做什么?
代码应该怎么写?
Log4j
在哪里呢?它发挥作用了吗?
总结
对log4j.properties
的一点介绍
附:一个有用的log4j.properties
文件模板
log4j.rootLogger=DEBUG,
CONSOLE,A1
log4j.addivity.org.apache=true
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework]
%d - %c -%-4r
[%t] %-5p %c %x - %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]
n%c[CATEGORY]%n%m[MESSAGE]%n%n
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework]
%d - %c -%-4r
[%t] %-5p %c %x - %m%n
# Use this layout for LogFactor 5 analysis
#
应用于文件回滚
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework]
%d - %c
-%-4r [%t] %-5p %c %x - %m%n
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
#
Set up for Log Facter 5
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
# Log Factor 5
Appender
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=web@www.wuset.com
log4j.appender.MAIL.SMTPHost=www.wusetu.com
log4j.appender.MAIL.Subject=Log4J
Message
log4j.appender.MAIL.To=web@www.wusetu.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework]
%d - %c -%-4r
[%t] %-5p %c %x - %m%n
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT
INTO LOG4J (Message) VALUES
('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework]
%d - %c
-%-4r [%t] %-5p %c %x - %m%n
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
log4j.appender.im =
net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host
= mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password
= password
log4j.appender.im.recipient = corlin@cybercorlin.net
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern
=[framework]
%d - %c -%-4r [%t] %-5p %c %x - %m%n
#
结束
发表评论
-
Maven使用deploy命令部署构建
2012-07-18 17:13 2465个人技术博客:http:/ ... -
Java 对象序列化您不知道的 5 件事
2012-07-04 14:56 1447个人技术博客:http://demi-panda.com ... -
Solr 获取分词
2012-05-07 18:32 3579个人博客:http://demi-panda.com ... -
地图经纬度距离计算
2012-03-30 15:43 2409public static final doubl ... -
ThreadLocal类
2012-03-01 18:38 938个人技术博客:http://demi-panda.com ... -
解决 – java.lang.OutOfMemoryError: unable to create new native thread
2012-01-16 20:27 2765一、认识问题: 首先我们通过下面这个 测试程序 ... -
Spring MVC中默认的ResponseBody为String的乱码问题
2011-12-22 16:54 1422个人技术博客:http://demi-panda.com ... -
ASCII和中文互转
2011-07-29 13:34 3822个人技术博客:http://demi-panda.com ... -
JVM 参数详解
2011-07-06 14:23 6487个人技术博客:http://demi-panda.com ... -
URL encode
2011-06-22 15:00 3117个人技术博客:http://demi-panda.co ... -
笔记之三-robots
2011-06-16 16:13 1143一、robots robots主要作用是屏蔽一些不愿意让 ... -
HTTP协议头部与Keep-Alive模式详解
2011-06-16 15:55 17344个人技术博客:http://demi-panda.com ... -
java.net.SocketException: Too many open files解决方法
2011-03-24 15:34 1209Get current limit: ulimit - ... -
利用HAProxy实现负载均衡
2011-02-14 11:04 2489HAProxy的安装和部署 Posted o ... -
负载均衡工具haproxy安装,配置,使用
2011-02-12 11:28 3919一,什么是haproxy HAProxy提供高可 ... -
Java编程思想第四版 完整中文版下载
2011-01-09 21:11 4167个人技术博客:http://demi-panda.com ... -
Java 理论与实践: 正确使用 Volatile 变量
2011-01-06 23:45 489Java 语言中的 volatile ... -
Java常用正则表达式
2010-12-08 20:41 947"^\d+$" //非负整数(正整数 + ... -
JConsole远程连接
2010-12-02 13:58 1029JConsole很好用,可以解决很多疑难杂症。但远程连接需要设 ... -
JVM配置参数中文说明
2010-12-02 13:04 1228JVM配置参数中文说明: -------- ...
相关推荐
Apache Commons Logging和Log4j是两个广泛使用的日志框架,本指南将深入讲解如何将它们结合使用,为你的Java应用程序提供强大的日志功能。 首先,让我们了解Apache Commons Logging。它是Apache软件基金会的一个...
在Java世界里,`commons-logging`和`log4j`是两个广泛使用的日志库。本文将详细介绍如何结合使用这两个库以及它们各自的功能和优势。 `commons-logging`是一个日志抽象层,它的主要目标是提供一个统一的日志接口,...
2. **使用API**:讲解如何在代码中通过commons-logging接口来调用log4j的记录方法,如`Logger.getLogger()`获取logger实例,以及`debug()`, `info()`, `warn()`, `error()`等不同级别的日志记录方法。 3. **日志...
Apache Log4j 2.3 和 Commons Logging 1.2 是两个在Java Web开发中广泛使用的日志处理库。这两个库对于记录应用程序的运行时信息、调试错误和监控系统状态至关重要。 **Apache Log4j 2.3** Log4j 是 Apache 组织...
标题中的“commons-logging”和“Log4j”是两个在Java编程中广泛使用的日志处理框架。它们在日志管理领域中各自扮演着不同的角色,而它们之间的关系则涉及到日志实现的抽象与具体实现的层次问题。 首先,让我们了解...
由于commons-logging的存在,你无需直接使用log4j的类,而是通过`java.util.logging.Logger`的接口来实现日志记录,commons-logging会自动找到log4j作为底层实现。 总之,log4j.jar和commons-logging.jar是Java开发...
Commons Logging 提供了一组接口和辅助类,使得应用程序可以透明地使用任何兼容的日志实现,如Log4j、Java内置的日志API(java.util.logging)或者简单的控制台输出。这个库的主要优点是灵活性和可插拔性,开发者...
用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。当然,common-logging内部有一个Simple logger的...
- Commons Logging是一个轻量级的日志记录API,允许开发者在不修改代码的情况下切换不同的日志实现,如Log4j、Java Util Logging或SLF4J。 - 版本 1.2 是一个稳定版本,虽然较旧但广泛兼容,为各种Java项目提供...
在标题"commons-logging-1.2_commonslogging_"中提到的"commons-logging-1.2.jar"就是这个库的1.2版本,它是Spring框架中常用的一个依赖,用于处理日志记录。 Spring框架广泛使用Commons Logging作为其默认的日志...
"commons-logging.jar" 和 "log4j.jar" 是两个广泛使用的Java日志框架,它们在Java应用开发中扮演着至关重要的角色。 **commons-logging.jar** 是Apache Commons Logging库,它提供了一个统一的日志接口,允许...
Commons-loggin的目的是为“所有的Java日志实现”提供一个统一的接口,它自身的日志功能平常弱(只有一个简单的SimpleLog?...另外一个我能想到的“同时使用commons-logging和Log4j”的原因是,简化使用和配置
log4j日志包 log4j.jar\commons-logging-1.1.1.jar private static final Log log = LogFactory.getLog(xxxxxx.class); 下载后解压就能得到这两个包
在项目中,我们通常会同时看到`log4j-1.2.14.jar`和`commons-logging-1.1.jar`这两个文件,这表明项目使用了Commons Logging作为日志接口,并将Log4j作为实际的日志实现。为了使两者协同工作,需要确保在项目的类...
Apache Commons Logging,简称为Commons Logging,是Apache软件基金会开发的一个开源日志框架,主要用于提供一个统一的日志API,让开发者能够在不改变代码的情况下,自由切换不同的日志实现库,如Log4j、Java内置的...
这个库允许开发者选择底层的日志实现,如Log4j、Java内置的日志API(java.util.logging)或者其他第三方日志系统,而无需修改代码。它的核心概念是提供一种抽象,使得应用代码与特定的日志实现解耦,从而增强了灵活...
今天我们将聚焦两个流行的日志框架——SLF4J(Simple Logging Facade for Java)和Logback,以及它们与Log4j和Commons-Logging的对比。 SLF4J是一个接口层的日志框架,它提供一个统一的API,允许用户在运行时插入...
Spring 框架广泛使用 Commons Logging 进行日志记录,因为它允许 Spring 与多种日志实现(如 log4j、java.util.logging 或 logback)无缝集成。 描述中提到的 "java spring 中打印信息的jar包" 指的是 Commons ...
在Hibernate中,`commons-logging`被用作日志服务的接口,使得Hibernate能够适配多种日志系统,如Log4j、Java内置的日志框架java.util.logging,或者简单的控制台输出。这种灵活性让开发者可以根据项目需求选择最...