日志记录—log4j的Logger和commons.logging的Log的区别

时间:2021-09-26 22:03:43

1、做日志的时候一般是两者一起用,commons-logging工作原理做接口,log4j做实现,应用起来比单独的使用log4j要简单。

commons-logging工作原理:
1.1 首先在classpath下寻找自己的配置文件commons-logging.properties,如果找到,则使用其中定义的Log实现类

1.2 如果找不到commons-logging.properties文件,则在查找是否已定义系统环境变量org.apache.commons.logging.Log,找到则使用其定义的Log实现类

1.3 查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类

1.4 使用JDK自身的日志实现类(JDK1.4以后才有日志实现类)

1.5 使用commons-logging自己提供的一个简单的日志实现类SimpleLog
(以上顺序不保证完全准确,请参考官方文档)
commons-logging总是能找到一个日志实现类,并且尽可能找到一个”最合适”的日志实现类.

2、apache common logging是一种log的框架接口,它本身并不实现log记录的功能,而是在运行时动态查找目前存在的日志库,调用相关的日志函数,从而隐藏具体的日志实现。log4j是具体的日志实现,真正负责”写”日志的这个功能;common logging本身不是log,你可以把它看做是一个日志的接口而log4j就是日志的实现;使用common logging方式实现日志,
主要的原因在于可以忽略底层的日志实现,或者说为以后的日志实现库的更换提供透明界面;你可以考虑下,假设从log4j更换为logback,势必要重写所有原本使用log4j的源代码,而使用common logging的情况下,只需要更换jar包,而不需要对源代码做任何改动 ;

3、实际使用

private static Logger logger = Logger.getLogger(*.class);
import org.apache.log4j.Logger;

private static final Log log = LogFactory.getLog(*.class);
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;