- 日志的重要性是随着系统的膨胀而显现的,在一个庞大的系统中查错没有各类日志信息 是步履维艰的。因此在系统加入日志是必须的。
- 最原始的日志方式,就是在程序的适当地方添加System.out.println()方法,可是带来 的问题是,系统稳定后,日志太大,若是要减小日志量,就须要从新修改程序,虽然只 是注释掉System.out.println()方法。可是万一系统再次出错,又要改。
- commons-logging提供分级日志功能,至关于把System.out.println()方法增强了,原来 是必定输出到控制台,如今commons-logging有6级日志,可是apache建议使用4级,即 ERROR、WARN、INFO、DEBUG。什么状况下输出日志由程序中写日志的方法决定,输出什 么级别以上的日志和输出到哪里由配置文件决定。
- 使用commons-logging以下:
//导入类 import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class TestLog { //获取以当前类为参数的日志对象 private static Log log = LogFactory.getLog(TestLog.class); public static void main(String[] args){ //输出4种不一样级别的日志 log.debug("111"); log.info("222"); log.warn("333"); log.error("444"); } }
- 固然还要配置commons-logging.properties文件,其中定义输出哪一个级别以上的日志。
- 好像这就完了,和log4j没啥关系。那么为何通常系统都会使用commons-logging和 log4j两个包来记录日志呢?
- 缘由就是commons-logging的输出功能比较弱,也就是输出格式和输出设备选择有限,只 有原生输出类org.apache.commons.logging.impl.SimpleLog。可是它提供了一个通用的 日志接口org.apache.commons.logging.log,让其余的包来实现复杂的输出。其中就有 Jdk14Logger, Log4JLogger,前面是jdk1.4以后加入的,后面就是log4j中的类。
- log4j也能够直接像commons-logging同样在程序中定义输出信息,而后再配置文件中定 义输出级别,可是这样作就会使程序惟一的和log4j绑定(若是你必定要单独使用 log4j,那么也是能够的),并且commons-logging更加智能,帮咱们自动选择"适当的" 日志实现系统:
1) 首先在classpath下寻找本身的配置文件commons-logging.properties,若是找到,则
使用其中定义的Log实现类;
2) 若是找不到commons-logging.properties文件,则在查找是否已定义系统环境变量
org.apache.commons.logging.Log,找到则使用其定义的Log实现类;
3) 不然,查看classpath中是否有Log4j的包,若是发现,则自动使用Log4j做为日志实现类;
4) 不然,使用JDK自身的日志实现类(JDK1.4之后才有日志实现类);
5) 不然,使用commons-logging本身提供的一个简单的日志实现类SimpleLog;
- 因此,在前面程序的基础上,只要导入log4j的包,则commons-logging会自动使用 log4j做为输出类,程序不须要任何改动,可是注意:log4j的配置文件 log4j.properties对Log4j来讲是必须的。若是classpath中没有该配置文件,或者配置 不对,将会引起运行时异常。因此下面介绍log4j.properties的配置。