在真正使用到日志之前,日志于我只是概念上的,但是真正接触到之后才发现真的有很大的好处:
1.监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作
2.跟踪代码运行时轨迹,作为日后审计的依据
3.担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。
好处不少吧,所以还是要好好学习一下日志的~
使用log4j进行日志记录,不仅可以清晰的记录日志的重要性,而且输出的日志信息格式可以按照你自己想要的方式定义,输出日志的目的地也可以自定义到控制台、文件等等,相对于简单的System.out.println来说,简直方便了很多!
那么log4j有哪些需要学习和注意的地方呢,下面我就简单的从log4j的基础、两种配置方式(.properties 和.xml)、在普通项目和spring项目中使用log4j这几个方面介绍一下log4j。
一.log4j的三个基本组件
Log4j有三个主要的组件:Logger(记录器),Appender(输出源)和Layout(布局),这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。在对这三个组件进行说明的前面,我想先附上一副图,显示一下它们之间的关系:
下面对三个组件分别进行说明:
(一) Logger
是用来取代System.out和System.err的日志写出器,供程序员输出日志信息
1.命名规则
Logger由一个String类的名字识别,大小写敏感,并且名字之间具有继承关系,子名有父名作为前缀,并用点.(分隔),形如x.y是x.y.z的父亲。
对于普通的logger来说,通过调用public static Logger Logger.getLogger(String name)或者public static Logger Logger.getLogger(Class clazz)获得(或者创建)一个named logger。后者相当于调用Logger.getLogger(clazz.getName())。
另外Logger有一个根Logger(rootLogger),它是所有logger的祖先,它有以下特性:
(1)总是存在的
(2)不可以通过名字获取
对于根logger的获取或创建,是通过调用public static Logger Logger.getRootLogger()来获得root logger的。
注:
1>.在对Logger实例进行命名时,没有严格的限制,可以随意命名,但是一般情况下建议使用该类所在位置来命名Logger实例,例如:static Logger logger = Logger.getLogger(ClientWithLog4j.class.getName());
2>.用同名参数调用Logger.getLogger(String name)将返回同一个logger的引用。故可以在一个地方配置logger,在另外一个地方获得配置好的logger,而无须相互间传递logger的引用。
3>.logger的创建可以按照任意的顺序,即,父logger可以后于子logger被创建。log4j将自动维护logger的继承树。
2.log的级别
每个logger都有一个日志级别,用来控制日志信息的输出,未被分配级别的日志将继承它的父log。
七个级别(等级由高到底):OFF>FATAL>ERROR>WARN>INFO>DEBUG>ALL
OFF:相当于关闭所有的输出,不输出任何级别的日志信息
ALL:相关于输出所有的日志级别的信息
建议使用fatal、error、warn、info和debug这五个级别
注:日志级别定义到一个级别之后,表示只打开该级别以及高于该级别的输出,输出该级别之前的信息,例如日志级别定义为warn,那么info和debug和all将不会被输出
(二)Appender
日志输出目的地。每个logger都可以拥有一个或多个appender,每个appender表示一个日志的输出目的地
1.log4j提供的几种appender:
1).org.apache.log4j.ConsoleAppender:
把日志输出到控制台,每个ConsoleAppender都有一个target,表示它的输出目的地,可以是System.out(标准输出设备,缓冲显示屏,默认情况下是System.out),或者是System.err(标准错误设备,不缓冲显示屏)。
从文章开头的类图中可以看出ConsoleAppender是继承了WriteAppender
2).org.apache.log4j.FileAppender
把日志输出到一个指定的日志文件中去。和ConsoleAppender一样,FileAppender也继承了WriteAppender。
3).org.apache.log4j.DailyRollingFileAppender
每天产生一个日志文件
4).org.apache.log4j.RollingFileAppender
是FileAppender的子类,同样是把日志输出到一个指定的文件中,但是不同的是,这个文件的大小收到限制,一旦文件大小到达指定尺寸的时候,该文件将向上滚动(最老的日志记录被擦除)
5).org.apache.log4j.WriterAppender</