1、告别System.out.println();的时代
System.out.println()对于很多还不怎么接触项目的童鞋来说,是一样再正常不过的查看运行状态的一个用法了。
但这毕竟是一时的,在真正的项目运用中,这个方式是不提倡使用的。
2、System.out.println();缺点
- 程序过多的System.out.println()给程序代码带来了很多杂乱的代码
- System.out.println()的作用只能输出显示在控制台上,是临时性的,无法将这些日志保存在文件中
- 人为的干涉System.out.println(),当不要求显示出这些信息的时候,要求人为的去找出这些代码的位置并注释(麻烦)
- System.out.println()并不能分级的显示信息,有些是提示,有些是错误等等,System.out.println()只会全盘的托出。
3、Log4J好处
- Log4j代码清晰,可以清楚的去定义是提示信息,还是错误信息,还是调试信息,等等。(下面会讲到7种信息提示级别)
- Log4j通过log4j.properties的配置文件,可以配置不同的输出方式,有(控制台、文件、html、mail等方式)可以选择
- Log4j也可以通过配置文件可以设置,需要显示哪些层级的信息,灵活性更高。
4、Log4J发展历史
Apache曾极力游说Sun把log4j加入JDK1.4,然而JDK1.4项目小组已经接近发布JDK1.4产品的时间了,因此拒绝了Apache的要求,使用自己的java.util.logging,这个包的功能比log4j差的很远,性能也一般。后来Apache就开发出来了commons-logging.jar用来兼容两个logger。因此用 commons-logging.jar写的log程序,底层的Logger是可以切换的,你可以选择log4j,java.util.logging或者Simple Logger(commons-logging.jar自带的)。
5、Log4J和commons-logging区别和联系
commons-logging是Log4j的封装:
- commons-logging能把日志处理的log4j或其他的处理工具与项目进行解耦。
- commons-logging可以自动的选择日志实现的系统,它甚至不需要配置
6、Log4J和commons-logging结合使用
- 首先在 classpath 下寻找自己的配置文件 commons-logging.properties,如果找到,则使用其中定义的 Log 实现类;
- 如果找不到 commons-logging.properties 文件,则在查找是否已定义系统环境变量有着org.apache.commons.logging.Log,找到则使用其定义的 Log 实现类;
- 否则,查看 classpath 中是否有 Log4j 的包,如果发现,则自动使用 Log4j 作为日志实现类;
- 否则,使用 JDK 自身的日志实现类(JDK1.4 以后才有日志实现类);
- 否则,使用 commons-logging 自己提供的一个简单的日志实现类 SimpleLog。
好处:
- 可以不需要有配置文件,指的是commons-logging.properties(如果没有commons-logging,开发人员还需要自己加载log4j.properties配置文件)
- 会自动查找最适合的日志实现方式,如Log4j,还是需log4j.properties的,不要和第一条混淆了。
- 在最坏的情况下,也有着自身的日志实现类SimpleLog来做日志处理。