`
ruvuoai
  • 浏览: 95729 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Log4j和common-logging的使用

阅读更多
Log4j和common-logging都是apache下的开源项目,他们的区别和简单使用请参考以下网址。
http://touch.iteye.com/blog/31632这是篇非常好的文章,我只想给他做一下补充。

补充一:
大家可以看到不管是log4j还是commons-logging,在程序中使用时都需要以下步骤:
1.初始化,生成静态实例:
commons-logging中是: private   static  Log log  =  LogFactory.getLog(TestLog. class );   
log4j中是:static  Logger logger  =  Logger.getLogger(TestLog4j. class );  
PropertyConfigurator.configure( " log4j.properties " );  
第二句可以省略,缺省情况下,他会自己找到 log4j.properties。
2. 在程序中使用:
logger.debug( " Here is some DEBUG " );
logger.info( " Here is some INFO " );  
logger.warn( " Here is some WARN " );  
如果这样做,会在每个程序中生成一个静态实例,如果是比较大的项目,这样做是不妥的。
我们可以在整个应用程序中生成一个实例,也就是初始化一次,在整个应用程序中都使用这个实例。
比如,我们写一个日志初始化类,如下:
package myb.hi.core.log;
 
import org.apache.commons.logging.*;
 
public class Logs {
       private static Log log;
       /**
        * Define a static Log variable,
        */   
              static{
                     try{
                            log=LogFactory.getLog(Logs.class);
                     }catch(Exception ex){
                            System.out.println("can't init the Logger, caused by: "+ex);
                     }
              }
       
       /**
        * Get the log object
        * @return Log
        */
       public static Log getLogger(){
              return log;
       }
}
上面代码使用commons-logging生成一个静态log实例,以后的程序就可以这样来做:
Logs.getLogger().info("begin Action: UserBaseInfoAction.getSingleUserInfo()");
DBSession.begin();
String fname=userForm.getFname();
userForm=UserBaseInfoBusiness.getSingleUserInfo(DBSession.getSession(),fname);
DBSession.commit();
request.setAttribute("userInfo",userForm);
Logs.getLogger().info("end Action: UserBaseInfoAction.getSingleUserInfo()");

在需要做记录的地方使用Logs.getLogger()获得这个log实例,然后再调用他的方法(info,debug,error等)。

Log4j的实现方法类似,初始化类可以这样写:
package myb.hi.core.log;
 
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
 
public class Logs {
       private static Logger log logger;
       /**
        * Define a static Log variable,
        */   
              static{
                     try{
                            logger=Logger.getLogger(LogInit.class);      
                            //DOMConfigurator.configure("E:/study/log4j/log4j.xml");//加载.xml文件
                          //PropertyConfigurator.configure("log4j.properties");//加载.properties文件                    }catch(Exception ex){
                            System.out.println("can't init the Logger, caused by: "+ex);
                     }
              }
       
       /**
        * Get the log object
        * @return Log
        */
       public static Logger getLogger(){
              return logger;
       }
}
应用程序中的调用是完全相同的。
补充二:
log4j.properties文件中,logger定义的日志级别可以和appender的不一样。
在定义logger时,尽量把日志级别往低里写;在appender里定义日志级别时可以按需要来写。
比如,定义一个logger,
log4j.rootLogger = DEBUG, CONSOLE,A1
定义成DEBUG,不管appender怎么定义,肯定有输出。
如果定义成:
log4j.rootLogger = INFO, CONSOLE,A1
定义成INFO,appender的定义必须级别必须比他高才行,如果appender定义成DEBUG,将不会输出。

同样的,在程序中调用logger时,调用的方法级别也必须要比logger定义的级别高,才有输出。
比如,log4j.rootLogger = INFO, CONSOLE,A1
定义成INFO,程序中,Logs.getLogger().info()方法是可以有输出的;Logs.getLogger().debug()方法将不会有任何输出。

补充三:
有关日志文件输出路径。
如果不指定路径,日志文件是输出在运行目录的,也就是应用服务器的bin目录下,
比如下面:
log4j.appender.A1.File = SampleMessages.log4j
假设应用服务器用的是tomcat,那么SampleMessages.log4j文件会在tomcat安装目录的bin子目录下。
为了把日志文件统一存放,请使用绝对路径或相对路径,比如下面:
log4j.appender.A1.File = ../logs/SampleMessages.log4j
这样日志文件将放在tomcat的logs目录内。

原文见http://blog.csdn.net/mayabin/archive/2007/01/22/1489830.aspx
分享到:
评论

相关推荐

    Log4j与common-logging

    标题中的“Log4j与common-logging”涉及的是两种广泛使用的Java日志框架。Log4j是Apache软件基金会的一个开源项目,它为Java应用程序提供了一种灵活的日志记录机制。而common-logging则是Apache Commons的一个组件,...

    slf4j+logback 于log4j+commons-logging大PK

    今天我们将聚焦两个流行的日志框架——SLF4J(Simple Logging Facade for Java)和Logback,以及它们与Log4j和Commons-Logging的对比。 SLF4J是一个接口层的日志框架,它提供一个统一的API,允许用户在运行时插入...

    log4j.jar以及common-logging.jar两个jar文件全在这

    在实际应用中,如果`log4j.jar`和`commons-logging.jar`一起使用,通常需要确保`commons-logging`的配置指向`log4j`作为其底层实现,以充分利用`log4j`的功能和灵活性。 总结,`log4j.jar`和`commons-logging.jar`...

    commons-logging-1.1.3.jar

    common-logging是apache提供的一个通用的日志接口。用户可以自由选择第三方的...使用它的好处就是,代码依赖是common-logging而非log4j, 避免了和具体的日志方案直接耦合,在有必要时,可以更改日志实现的第三方库。

    log4j.jar和common-logging.jar两个都有

    然而,同时使用`log4j.jar`和`common-logging.jar`也可能带来一些问题。例如,如果项目中存在多个版本的log4j或者日志实现冲突,可能会导致日志输出混乱。为了避免这种情况,需要正确管理类加载器和日志配置,确保...

    common-logging库 完整版 jar包 Eclipse

    4. **配置日志实现**:`common-logging`通过查找类路径中的特定文件(如`log4j.properties`或`logging.properties`)来确定使用哪个日志实现。如果没有找到,它会默认使用`java.util.logging`。如果你希望使用其他...

    Common-log 和log4j2 配合使用

    将`Common-Log`与`log4j2`结合使用,首先需要在项目中引入`Common-Log`的接口库和`log4j2`的实现库。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <groupId>commons-logging <artifactId>commons...

    Apache Commons-logging使用实例

    所以目前比较流行的是 Commons-logging 和 Log4j 结合使用。 * 部署日志器:下载 commons-logging.jar 和 log4j.jar 包,能后把它们放到工程的 lib 目录下,引入工程中。 * 指定日志器:在属性文件 common-logging....

    用maven + spring mvc +JDBCTEMPLATE +由Slf4j实现Common-Logging+Log4j的日志控制(数据库用MySQL)

    4. **Slf4j** - 日志门面,允许用户在运行时选择不同的日志实现,如Common-Logging或Log4j,提供了统一的API进行日志记录。 5. **MySQL** - 常用的关系型数据库管理系统,用于存储应用的数据。 在搭建项目时,首先...

    common-logging1.1.1jar

    通过抽象出一个通用的日志接口,开发人员可以在运行时选择不同的日志实现,如log4j、java.util.logging或者Apache Log4j等,而无需修改代码。这使得项目具有更好的灵活性和可移植性。 在Commons Logging 1.1.1中,...

    commons-logging-1.2jar工具

    在Java社区中,有多个日志实现,如log4j、java.util.logging(JUL)和Logback等。这些实现各有特点,但它们的API并不兼容,这给开发者在不同日志系统间切换带来了困难。Commons Logging通过提供一个统一的API,使得...

    commons-logging-1.0.4.zip

    这个库的主要目标是为Java应用程序提供一个简单、统一的接口来使用各种日志框架,如log4j、Java内置的日志API(java.util.logging)或简单的控制台输出。在本文中,我们将深入探讨Commons Logging的核心概念、主要...

    Common Logging的jar包.zip

    Commons Logging通过提供一个抽象层,允许开发者使用简单的API来记录日志,而具体的日志实现(如Log4j、Java Util Logging或SLF4J)可以根据项目需求或者环境配置进行选择和切换。 Commons Logging的核心概念包括...

    commons-logging.jar 版本1.2

    Commons Logging提供了统一的日志接口,使得开发者能够在不修改代码的情况下切换不同的日志实现,如Log4j、java.util.logging(JUL)或Apache Logkit等。这种灵活性使得项目在不同环境下的日志配置更加方便,降低了...

    apache-log4j-2.3 核心jar包

    **log4j-api-2.x 和 log4j-core-2.x是必须的,其他包根据需要引入, Common Logging Bridge: log4j-jcl-2.3 Log4j 2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步、等等),使得日志的吞吐量、性能...

    log4jappender配置kafka使用的jar包

    你需要`log4j-api.jar`和`log4j-core.jar`。 2. **Kafka生产者库**:Log4jAppender需要使用Kafka的生产者API来发送日志到Kafka集群。这通常指的是`kafka-clients.jar`。 3. **特定的Log4j-Kafka适配器**:为了使...

    commons-logging-1.0.3.jar

    用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。当然,common-logging内部有一个Simple logger的...

    日志框架学习之一:commons-logging+log4j

    标题中的“日志框架学习之一:commons-logging+log4j”揭示了本文将探讨的是在Java开发中常用的两个日志处理工具——Apache Commons Logging和Log4j。这两个框架是日志记录的基础,广泛应用于各种Java应用程序,为...

    commons-logging.jar

    Commons Logging (JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的... Because we use commons-logging you are free to choose your logging implementation (Log4j is a common choice).

Global site tag (gtag.js) - Google Analytics