天天看点

commons-logging.jar与log4j.jar区别及log4j使用一、区别二、使用

一、区别

apache.common.logging是一种log的框架接口,它本身并不实现log记录的功能,而是在运行时动态查找目前存在的日志库,调用相关的日志函数,从而隐藏具体的日志实现(commons-logging会自动发现并应用Log4j)

log4j是具体的日志实现,真正负责"写"日志的这个功能

简单说:common logging本身不是log,你可以把它看做是一个日志的接口,使用common logging方式实现日志,主要的原因在于可以忽略底层的日志实现,或者说为以后的日志实现库的更换提供透明界面

log4j就是日志的实现

二、使用

要使用Log4j: 

1,拷贝log4j.jar;

2,编写log4j.properties配置文件。

1、Log4j中有三种组件,它们分别是 Logger、Appender和Layout。

 Logger:日志记录器,用来输出多种级别的日志信息。

       Log4j中最顶级的记录器称为rootLogger,可通过Logger.getRootLogger()方法获得根记录          器,其它Logger通过Logger.getLogger(name) 方法获得。 

 Appender:附着器,用来控制日志信息的输出目标。Log4j中有多种appender,分别用来将日志          信息输出到控制台、文件、GUI组件等。

      一个Logger可以关联多个Appender,比如:可将Log信息输出到控制台同时存储到一个文件            中。 

Layout:定义日志的输出内容及格式。

2、日志级别

log4j主要有如下的信息级别:

fatal:非常严重的错误,导致系统中止。期望这类信息能立即显示在状态控制台上。

error:其它运行期错误或不是预期的条件。期望这类信息能立即显示在状态控制台上。

warn:使用了不赞成使用的API、非常拙劣使用API, ‘几乎就是’错误, 其它运行时不合需要和不合            预期的状态但还没必要称为 “错误”。期望这类信息能立即显示在状态控制台上。

info:运行时产生的有意义的事件。期望这类信息能立即显示在状态控制台上。

debug:系统流程中的细节信息。期望这类信息仅被写入log文件中。

trace:更加细节的信息。期望这类信息仅被写入log文件中。

通常情况下,我们希望将info级别以上的日志信息输出到控制台,而debug级别以上的信息写入到log文件中,而error信息写入到一个单独的文件中去,下面我们的实例将会实现这样的功能。

3、配置根记录器:

        log4j.rootLogger = [ level ] , appenderName, appenderName, …

      level设定日志输出等级,记录器将只记录该等级以上的日志信息。

      level取值:OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL。

4、配置Appender

log4j.appender.[appenderName] = [appender.class]

log4j.appender.[appenderName].[option1] = [value1]

  …   

log4j.appender.[appenderName].[optionN] = [valueN]

○ 常用的[appender.class]有以下几种: 

  org.apache.log4j.ConsoleAppender  (控制台), 

  org.apache.log4j.FileAppender   (文件), 

  org.apache.log4j.DailyRollingFileAppender   (每天产生一个日志文件)

○ [option1] 是和具体appender类相关的属性,如果是ConsoleAppender,至少需要设置其layout属性;如果是FileAppender,需要设置layout和file属性。

5、配置Layout

log4j.appender.[appenderName]. layout = [ layout class ] 

log4j.appender.[appenderName].layout.[option1] = value1 

  … 

log4j.appender.[appenderName].layout.[optionN] = valueN 

○常用的[ layout class ] 有:

    org.apache.log4j.SimpleLayout (固定模式,只输出日志等级和日志内容) 

    org.apache.log4j.PatternLayout (可指定日志内容输出模式)

【示例】ConsoleAppender和SimpleLayout

        log4j.appender.stdOut=org.apache.log4j.ConsoleAppender

        log4j.appender.stdOut.layout=org.apache.log4j.SimpleLayout 

○如果使用PatternLayout,还需设置conversionPattern,该属性类似于java中的格式说明字符串,其中包含的转换符规定了输出的内容和格式。

【示例】FileAppender和PatternLayout

        log4j.appender.myLogFile=org.apache.log4j.FileAppender

        log4j.appender.myLogFile.file=c:/test-log.log

        log4j.appender.myLogFile.layout=org.apache.log4j.PatternLayout

        log4j.appender.myLogFile.layout.conversionPattern=%d [%c]-[%-5p]%m%n

转换符的含义

  %d  日期和时间

  %m 代码中给定的消息内容 

  %p  日志的等级,即DEBUG,INFO,WARN,ERROR,FATAL等

  %c  所在类的全名 

  %t   产生该日志的线程名 

  %n  回车换行符

配置log4j.properties文件

放在classpath下,如果是Maven中就在src/resources下。具体意义看注释。

### set log levels ###
log4j.rootLogger = debug , stdout , D , E

### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
## 输出INFO级别以上的日志
log4j.appender.stdout.Threshold = INFO
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %p %c{}:%L - %m%n

### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D:/logs/log.log
log4j.appender.D.Append = true
## 输出DEBUG级别以上的日志
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

### 保存异常信息到单独文件 ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
## 异常日志文件名
log4j.appender.E.File = D:/logs/error.log
log4j.appender.E.Append = true
## 只输出ERROR级别以上的日志!!!
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
           

测试

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class LogTest {

    private static Log logger = LogFactory.getLog(LogTest.class);

    public static void main(String[] args) {
        logger.trace("我是trace信息");
        logger.debug("我是debug信息");
        logger.info("我是info信息");
        logger.warn("我是warn信息");
        logger.error("我是error信息");
        logger.fatal("我是fatal信息");
    }
}
           

参考:https://blog.csdn.net/geekun/article/details/51398621

继续阅读