- 浏览: 150053 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
mathlpz:
JSP_Struts标签 html:select option基本用法 -
phil09s:
还有一篇相当不错的教程:http://lavasoft.blo ...
commons-logging log4j的联系区别 -
phil09s:
灰常不错的教程,配合http://sammor.iteye.c ...
commons-logging log4j的联系区别
1、Apache通用日志接口(commons-logging.jar)介绍
Apache Commons包中的一个,包含了日志功能,必须使用的jar包。这个包本身包含了一个Simple Logger,但是功能很弱。在运行的时候它会先在CLASSPATH找log4j,如果有,就使用log4j,如果没有,就找JDK1.4带的 java.util.logging,如果也找不到就用Simple Logger。commons-logging.jar的出现是一个历史的的遗留的遗憾,当初Apache极力游说Sun把log4j加入JDK1.4,然而JDK1.4项目小组已经接近发布JDK1.4产品的时间了,因此拒绝了Apache的要求,使用自己的java.util.logging,这个包的功能比log4j差的很远,性能也一般。后来Apache就开发出来了commons-logging.jar用来兼容两个logger。因此用 commons-logging.jar写的log程序,底层的Logger是可以切换的,你可以选择log4j,java.util.logging或者它自带的Simple Logger。不过我仍然强烈建议使用log4j,因为log4j性能很高,log输出信息时间几乎等于System.out,而处理一条log平均只需要5us。
Apache通用日志包提供一组通用的日志接口,用户可以自由选择实现日志接口的第三方软件
通用日志目前支持以下日志实现
Log4j日志器
JDK1.4Logging
SimpleLog日志器
NoOpLog日志器
1.1、Log 接口
Common-logging的应用程序编程接口主要在org.apache.commons.logging.log接口中定义,这个接口主要定义了两类操作: 一类是级别判断,用于减少不必要的日志操作的参数计算从而提高性能。另一类是日志登记,按照级别登记日志信息。
通用日志包把日志消息分为6种级别Fatal,Error,Warn,Info,Debug和Trace
org.apache.commons.logging.Log接口代表日志器,它提供了一组输出日志的方法,日志登记操作分又为两小类:一个参数的日志信息登记操作和两个参数的日志信息登记操作。前者对三类用户都适用,后者用于打印日志登记处的出错堆栈信息,所以更适用于开发人员调式与维护使用
fatal(Object message);
error(Object message);
warn (Object message);
info (Object message);
debug(Object message);
trace(Object message);
debug(Object message, Throwable t);
trace(Object message, Throwable t);
......
这里需要注意的是,只有当输出日志的级别大于等于日志器配置的日志级别时,这个方法才会真正被执行.例如日志器设置日志级别为Warn,那么程序中,它的
fatal(),error(),warn()方法会被执行,而info(),debug(),trace()
不会被执行.
Log接口还提供了一组判断是否允许输出特定级别日志消息的方法
isFatalEnable();
isErrorEnable();
isWarnEnable();
isInfoEnable();
isDebugEnable();
isTraceEnable();
1.2、LogFactory接口
org.apache.commons.logging.LogFactory接口提供了获得日志器实例的两个静态方法
public static Log getLog(String name)throws LogConfigurationException
public static Log getLog(Class class)throws LogConfigurationException
public static Log getLog(Class class)
{
getLog(class.getName());
}
2、Log4J介绍
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
2.1、Log4J配置说明:
log4j配置文件有三个主要的组件:Logger,Appender和Layout,分别为日志类型,日志输出目的地,日志输出格式.
跟proxool类似,log4j支持两种类型的配置文件,xml和properties 。log4j.properties配置文件如下:(需要把log4j的配置文件放在classpath下)
2.1.1 log4j.rootLogger =INFO, stdout , R
此句为将等级为INFO的日志信息输出到stdout和R这两个目的地,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,只有等于及高于这个级别的才进行处理,则应用程序中所有DEBUG级别的日志信息将不被打印出来。ALL:打印所有的日志,OFF:关闭所有的日志输出。 appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。
2.1.2 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
此句为定义名为stdout的输出端是哪种类型
Appender 负责控制日志记录操作的输出。
其语法为:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.optionN = valueN
这里的appenderName为在①里定义的,可任意起名。
其中,Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),可通过log4j.appender.R.MaxFileSize=100KB设置文件大小,还可通过 log4j.appender.R.MaxBackupIndex=1设置为保存一个备份文件。
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
例如:log4j.appender.stdout=org.apache.log4j.ConsoleAppender
定义一个名为stdout的输出目的地,ConsoleAppender为控制台。
2.1.3配置日志信息的格式(布局)Layout
Layout 负责格式化Appender的输出。
其语法为:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.optionN = valueN
其中,Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
2.1.4格式化日志信息
Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数
2.2、关于Log4j比较全面的配置
2.2.1 应用于控制台
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
2.2.2应用于文件
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
2.2.3 应用于回滚文件
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
2.2.4应用于socket
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
2.2.5应用于邮件
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
2.2.6应用于数据库
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.db.sql=INSERT INTO SS_LOG4J_LOG (PRIORITY,LOGDATE,CLASS,METHOD,MSG) VALUES('%p','%d{yyyy-MM-dd HH:mm:ss}','%C','%M','%m') log4j.appender.db.layout=org.apache.log4j.PatternLayout log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n <pre name="code" class="java">
3、Log4J的使用
3.1、在application中的使用:
将log4j.jar和common-logging.jar加入到build path中即可。
3.2 在web应用中使用log4j
3.2.1 创建一个集成httpservlet的servlet文件,在init中对log4j进行初始化
public class log4jInit extends HttpServlet {
@Override
public void init() throws ServletException {
Log log = LogFactory.getLog(this.getClass().getName());
//Logger logger = Logger.getLogger(this.getClass());
String prefix = this.getServletContext().getRealPath("/");
System.out.println(prefix);
String file = this.getServletConfig().getInitParameter("log4j-init-file");
if(file!=null)
PropertyConfigurator.configure(prefix+file);
}@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
}@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
}}
3.2.2 在web.xml中定义这个servlet,并在应用启动时启动
<servlet>
<servlet-name>log4jInit</servlet-name>
<servlet-class>com.highsoft.log4j.log4jInit</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>/WEB-INF/classes/log4j1.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>3.3 在Spring中集成log4j
3.3.1 在web.xml中集成
<!--如果不设,默认为web.root,但最好设置,以免项目间冲突—>
<!--如果应用服务器下有不止一个的应用在使用spring的Log4jConfigListener,需要修改web环境中webAppRootKey值(这样log4j的配置文件里就可以用${myAppfuse.root}来表示刚刚设进去的系统变量,例如:log4j.appender.logfile.File=${myAppfuse.root}/logs/mylog.log)。否则两个默认值web.root在环境变量中就会有冲突导致第二个应用启动失败。—>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>myappfuse.root</param-value>
</context-param><!--在这里定位配置文件,需要的是从root开始的绝对路径—>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param><!--Spring默认刷新Log4j配置文件的间隔,单位为millisecond-->
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener><!--这里用listener,也可以用下面的servlet—>
<servlet>
<servlet-name>log4j</servlet-name>
<servlet-class>org.springframework.web.util.Log4jConfigServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
3.3.2 在代码中使用Log4j
我们在需要输出日志信息的类中做如下的三个工作:1、导入所有需的commongs-logging类:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
2、在自己的类中定义一个org.apache.commons.logging.Log类的私有静态类成员:
private final Log log = LogFactory.getLog(getClass());
LogFactory.getLog()方法的参数使用的是当前类的class。
3、使用org.apache.commons.logging.Log类的成员方法输出日志信息:
if (log.isDebugEnabled()){
log.debug("111");
}
if (log.isInfoEnabled()){
log.info("222");
}
if (log.isWarnEnabled()){
log.warn("333");
}
if (log.isErrorEnabled()){
log.error("444");
}
if (log.isFatalEnabled()){
log.fatal("555")
}
4、SLF4j介绍
准确的说,slf4j并不是一种具体的日志系统,而是一个用户日志系统的facade,允许用户在部署最终应用时方便的变更其日志系统。
4.1、使用方式:
在系统开发中,统一按照slf4j的API进行开发,在部署时,选择不同的日志系统包,即可自动转换到不同的日志系统上。比如:选择JDK自带的日志系统,则只需要将slf4j-api-1.5.10.jar和slf4j-jdk14-1.5.10.jar放置到classpath中即可,如果中途无法忍受JDK自带的日志系统了,想换成log4j的日志系统,仅需要用slf4j-log4j12-1.5.10.jar替换slf4j- jdk14-1.5.10.jar即可(当然也需要log4j的jar及配置文件)
4.2、使用场景:
我们开发的是类库或者嵌入式组件,可以考虑使用slf4j,因为我们并不能决定用户选择哪种日志系统(不同软件开发公司会钟情于不同的日志系统);但是如果我们开发独立应用,面向的是最终客户,则无需考虑slf4j,因为最终客户只关心功能实现,不会在意开发公司具体使用什么日志系统的。
4.3、应用举例:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author chb
*
*/
public class TestSlf4j {
Logger log = LoggerFactory.getLogger(TestSlf4j.class);
public void testLog(){
log.info("this is a test log");
}
/**
* @param args
*/
public static void main(String[] args) {
TestSlf4j slf = new TestSlf4j();
slf.testLog();
}
}1>JDK自带的log输出
首先,我们在classpath中加入slf4j-api-1.5.10.jar和slf4j-jdk14-1.5.10.jar两个包,然后运行main函数,输出信息如下:
view plaincopy to clipboardprint?
2010-1-5 21:44:47 chb.test.slf4j.TestSlf4j testLog
信息: this is a test log
2010-1-5 21:44:47 chb.test.slf4j.TestSlf4j testLog
信息: this is a test log
2>slg4j提供的simple log
然后,我们用slf4j-simple-1.5.10.jar替换slf4j-jdk14-1.5.10.jar,选择使用slf4j提供的simple log,输出信息如下:
view plaincopy to clipboardprint?
0 [main] INFO chb.test.slf4j.TestSlf4j - this is a test log
0 [main] INFO chb.test.slf4j.TestSlf4j - this is a test log
3>log4j日志输出
再然后,我们再用slf4j-log4j12-1.5.10.jar替换slf4j-simple-1.5.10.jar(记得classpath也需要增加log4j依赖jar包),同时增加一个log4j.properties文件,我们再稍微修改一下main函数,加载一下log4j.properties,如;
view plaincopy to clipboardprint?
public static void main(String[] args) {
PropertyConfigurator.configure("D:\\log4j.properties");
TestSlf4j slf = new TestSlf4j();
slf.testLog();
}4.4、原理介绍--静态绑定
大家看到要使用哪种日志系统,只需要将对应的日志系统所需要的jar包文件(包括slf4j提供的jar包和日志系统自身依赖的jar包,例如:slf4j-log4j12-1.5.10.jar和log4j.1.2.jar)放入classpath即可,slf4j可以自动探测具体使用哪种日志系统,这种技术被称为静态绑定。
在实际使用中,我们通过LoggerFactory.getLogger()获得logger,查看LoggerFactory的源代码会发现如下两点,
LoggerFactory通过StaticLoggerBinder.getSingleton().getLoggerFactory()获得LogFactory,然后再通过该LogFactory来获取logger的
但是StaticLoggerBinder类并不在slf4j-api-1.5.10.jar中,分析与具体日志系统相关的jar包,会发现每个jar包都有一个StaticLoggerBinder类的实现(如slf4j-log4j12-1.5.10.jar、slf4j-simple- 1.5.10.jar、slf4j-jdk14-1.5.10.jar均有StaticLoggerBinder类实现),这就很明白了,slf4j在启动时会动态到classpath中查找StaticLoggerBinder类,找到之后就可以生成对应日志系统的日志文件了。
这里就有一个问题了,slf4j是如何将自己的通用日志格式转成不同的日志系统的格式的呢?
我们再分析每个日志系统相关的源代码,会发现不同日志系统包都会有一个Adapter,用来在slf4j和不同日志系统之间做转换。4.5、与common-logging的区别
Apache Common-Logging是广泛使用的Java日志门面库。我以前一直都使用它和log4j编写日志。
Apache Common-Logging通过动态查找的机制,在程序运行时自动找出真正使用的日志库。
Apache Common-Logging一直都运作得很好。直到最近,我写OSGI插件时,它不能工作了。
原因是Apache Common-Logging使用了ClassLoader寻找和载入底层的日志库。而OSGI中,不同的插件使用自己的ClassLoader。
一个线程的ClassLoader在执行不同的插件时,其执行能力是不同的。
OSGI的这种机制保证了插件互相独立,然而确使Apache Common-Logging无法工作!
解决之道是使用新的日志门面库Slf4j。
Slf4j库类似于Apache Common-Logging。但是,他在编译时静态绑定真正的Log库。使用Slf4j时,如果你需要使用某一种日志实现,那么你必须选择正确的Slf4j的jar包的集合。-----------
# Properties for configuring Log4j
# Set logger level
log4j.rootLogger=CONSOLE
log4j.logger.org=CONSOLE
log4j.additivity.com.gm=false
log4j.additivity.com.eds=false
log4j.additivity.FrameworkLogging=false
log4j.additivity.com.gm.workbench.order.service.common.helper.mq=false
log4j.logger.com.gm=INFO,APP_LOG
#log4j.logger.com.gm.workbench.order.service.offline=CONSOLE
#log4j.logger.com.gm.workbench.order.service.online.elc=CONSOLE
log4j.logger.com.eds=CONSOLE
#log4j.logger.FrameworkLogging=CONSOLE
#log4j.logger.com.gm.workbench.order.service.common.helper.mq=CONSOLE
#log4j.logger.com.gm.workbench.order.service.online.elc=CONSOLE
#log4j.logger.com.gm.workbench.order.service.online.manageinventory=CONSOLE
#log4j.logger.com.gm.workbench.order.service.common.dataaccess=CONSOLE
#log4j.logger.com.gm.workbench.order.service.online.bulkorder=CONSOLE
# CONSOLE is set to be a ConsoleAppender
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p %c{1}:(%13F:%L) %3x - %m%n
# APP_LOG is set to be a RollingFileAppender
log4j.appender.APP_LOG=org.apache.log4j.RollingFileAppender
log4j.appender.APP_LOG.MaxFileSize=5000KB
log4j.appender.APP_LOG.MaxBackupIndex=10
log4j.appender.APP_LOG.File =c:/log4j/app-logger.log
log4j.appender.APP_LOG.Append = true
log4j.appender.APP_LOG.layout=org.apache.log4j.PatternLayout
log4j.appender.APP_LOG.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p %c{1}:(%13F:%L) %3x - %m%n
# AUD_LOG is set to be a RollingFileAppender
log4j.appender.AUD_LOG=org.apache.log4j.RollingFileAppender
log4j.appender.AUD_LOG.MaxFileSize=50000KB
log4j.appender.AUD_LOG.MaxBackupIndex=5
log4j.appender.AUD_LOG.File =c:/log4j/audit-logger_001.log
log4j.appender.AUD_LOG.Append = true
log4j.appender.AUD_LOG.layout=org.apache.log4j.PatternLayout
log4j.appender.AUD_LOG.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p %c{1}:(%13F:%L) %3x - %m%n
评论
发表评论
-
读取配置文件
2014-05-16 13:41 0package com.hundsun.hsacct.act ... -
Linux环境搭建系统
2013-05-20 10:09 01. VMware workstation ... -
Java 繁体化
2013-05-10 13:59 1369package com.xxyy.common; i ... -
Error : \Java\jdk1.6.0_17\lib\tools.jar was unexpected at this time
2012-02-14 21:26 1858when our application server fai ... -
findbugs ant 代码审核工具
2012-01-11 15:38 2994Findbugs 是一个静态分析工具,它检查类或者 JA ... -
Solaris 10 上网
2011-10-17 13:12 1181昨天在虚拟机里面装好了solaris操作系统,却上不了网,按照 ... -
Solaris 10 的安装【转载】
2011-10-17 10:22 2900Solaris 10 的安装------------- ... -
eclipse 提示 快捷键
2011-10-08 16:53 899eclipse3.3中把内容助手(content assist ... -
windows环境下SVN服务器环境的搭建
2011-07-04 22:42 1787一 环境 操作系统:windows2003 serve ... -
MongoDB的初次接触学习体验
2011-06-16 17:52 0待续。。。 -
win7免安装mysql配置使用
2011-06-12 11:29 3025win7 64位机 下载地址:http://www.mys ... -
如何让电脑发音帮你读英文
2010-08-28 18:22 3585[1]首先,在桌面单击右键,在旁拉菜单中选择“文本文档”,就会 ... -
[转载] String getBytes()
2010-08-02 14:35 1372public byte[] getBytes()使用平台默认的 ... -
正则表达式 java
2010-01-19 11:11 1080目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix ... -
zk webapps下 文件 乱码
2010-01-06 10:30 182518328 [main] INFO lucene.Lucene ... -
SPRING 定时任务设置详解
2010-01-04 15:15 1179org.springframework.schedulin ... -
C3P0 连接池详细配置
2009-12-06 15:27 919<c3p0-config> <default ... -
WebApplicationContext : org.springframework.web.context.ContextLoaderListener作用
2009-12-05 15:59 1447如果您想要在自己所定义的Servlet类别中使用Spring的 ... -
一个web项目web.xml的配置中<context-param>配置是起什么作用的
2009-12-05 15:44 12301.启动一个WEB项目的时候,容器(如:Tomcat)会去读它 ... -
寻找项目的配置文件
2009-10-21 11:40 993try { String ur ...
相关推荐
Apache Log4j 2.3 和 Commons Logging 1.2 是两个在Java Web开发中广泛使用的日志处理库。这两个库对于记录应用程序的运行时信息、调试错误和监控系统状态至关重要。 **Apache Log4j 2.3** Log4j 是 Apache 组织...
由于commons-logging的存在,你无需直接使用log4j的类,而是通过`java.util.logging.Logger`的接口来实现日志记录,commons-logging会自动找到log4j作为底层实现。 总之,log4j.jar和commons-logging.jar是Java开发...
标题中的“commons-logging”和“Log4j”是两个在Java编程中广泛使用的日志处理框架。它们在日志管理领域中各自扮演着不同的角色,而它们之间的关系则涉及到日志实现的抽象与具体实现的层次问题。 首先,让我们了解...
《Commons-Logging + Log4j 入门指南》 在Java编程中,日志记录是必不可少的一部分,它有助于调试、性能分析以及故障排查。Apache Commons Logging和Log4j是两个广泛使用的日志框架,本指南将深入讲解如何将它们...
`commons-logging`会自动检测并选择可用的日志实现,优先级通常是:已配置的`commons-logging.properties`、系统环境变量`org.apache.commons.logging.Log`、`log4j`库、JDK内置日志、最后是`commons-logging`自带的...
Commons Logging 提供了一组接口和辅助类,使得应用程序可以透明地使用任何兼容的日志实现,如Log4j、Java内置的日志API(java.util.logging)或者简单的控制台输出。这个库的主要优点是灵活性和可插拔性,开发者...
用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。当然,common-logging内部有一个Simple logger的...
在标题"commons-logging-1.2_commonslogging_"中提到的"commons-logging-1.2.jar"就是这个库的1.2版本,它是Spring框架中常用的一个依赖,用于处理日志记录。 Spring框架广泛使用Commons Logging作为其默认的日志...
Apache Commons Logging,简称为Commons Logging,是Apache软件基金会开发的一个开源日志框架,主要用于提供一个统一的日志API,让开发者能够在不改变代码的情况下,自由切换不同的日志实现库,如Log4j、Java内置的...
Spring 框架广泛使用 Commons Logging 进行日志记录,因为它允许 Spring 与多种日志实现(如 log4j、java.util.logging 或 logback)无缝集成。 描述中提到的 "java spring 中打印信息的jar包" 指的是 Commons ...
在项目中,我们通常会同时看到`log4j-1.2.14.jar`和`commons-logging-1.1.jar`这两个文件,这表明项目使用了Commons Logging作为日志接口,并将Log4j作为实际的日志实现。为了使两者协同工作,需要确保在项目的类...
开发工具 commons-logging-1.2开发工具 commons-logging-1.2开发工具 commons-logging-1.2开发工具 commons-logging-1.2开发工具 commons-logging-1.2开发工具 commons-logging-1.2开发工具 commons-logging-1.2开发...
这个库允许开发者选择底层的日志实现,如Log4j、Java内置的日志API(java.util.logging)或者其他第三方日志系统,而无需修改代码。它的核心概念是提供一种抽象,使得应用代码与特定的日志实现解耦,从而增强了灵活...
log4j日志包 log4j.jar\commons-logging-1.1.1.jar private static final Log log = LogFactory.getLog(xxxxxx.class); 下载后解压就能得到这两个包
在Hibernate中,`commons-logging`被用作日志服务的接口,使得Hibernate能够适配多种日志系统,如Log4j、Java内置的日志框架java.util.logging,或者简单的控制台输出。这种灵活性让开发者可以根据项目需求选择最...
这个库的主要目标是为Java应用程序提供一个简单且统一的日志接口,使得开发者可以在不修改代码的情况下,方便地切换到不同的日志实现,如Log4j、Java内置的日志(java.util.logging)或者其它第三方日志框架。...
When writing a library it is very useful to log information. However there are many logging implementations out there, and a library cannot impose the use of a particular one on the overall ...
Commons-loggin的目的是为“所有的Java日志实现”提供一个统一的接口,它自身的日志功能平常弱(只有一个简单的SimpleLog?...另外一个我能想到的“同时使用commons-logging和Log4j”的原因是,简化使用和配置
在实际应用中,将Log4j和Commons Logging结合使用,通常是通过Commons Logging调用Log4j作为其后台日志实现。这样做的好处在于,一方面,我们能够利用Log4j的强大功能进行日志记录,另一方面,如果将来需要更换日志...