一、区别
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