Log4j使用总结

以前的项目中为了能够检查程序的运行状态,需要将程序运行时的一些信息记录到日志文件中。

Log4j是一个较全面的日志软件包,能够满足各种形式的日志记录需要,并且使用起来比较方便,结构非常清晰,经过这段时间的使用,对其进行了较详细的学习,在实际项目的使用中,深刻感受到了它的方便和功能的全面。

Log4j的基本使用方法在其官方网站上有较详细的介绍,下面这篇文章对于基本应用已经满足:

Short introduction to log4j:http://logging.apache.org/log4j/docs/manual.html


下面根据我自己的使用,对其使用方法进行总结。

Log4j最初只是为了对java程序进行日志记录的软件包,而现在已经有多种语言的版本,如C, C++, C#, Perl, Python, Ruby, 和 Eiffel。

Log4j中有三个最重要的概念:Logger,Appender 和 Layout,下面对它们分别叙述:

一、Logger

Logger可以理解为一个日志记录器,在程序中由它完成日志记录的工作。在Log4j中有对应的Logger类,其提供设置日志输出级别,日志输出地址的方法,并可将信息按照指定级别(Level)进行输出

Logger中可以设置的级别有七级,由低到高分别为:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF ,其中,ALL 代表输出所有级别的日志信息,OFF 代表关闭所有日志信息的输出,也就是说,Logger在程序中可以输出的日志信息有五种级别,可分别用在不同情况的日志输出。如:DEBUG 级别的信息通常为一些调试时程序开发者需要查看的程序运行状态,ERROR 级别的信息则主要用于记录程序运行的错误。

由于日志信息被分为了不同级别,而Log4j又提供了对不同级别日志的输出开关,因此可以在不修改程序源代码的情况下定制日志的输出内容。

在log4j的配置文件中可用方式配置日志的输出级别:

log4j.rootLogger=OFF #关闭根Logger的日志输出
log4j.logger.mylogger=DEBUG #将mylogger的日志输出级别设定为DEBUG
所有在配置文件中配置的信息都可以在程序中动态配置

Logger有层次关系,其日志输出级别也会继承父级的输出级别,因此,当某一Logger没有指定输出级别时,将默认使用其父级Logger的输出级别。

Logger的输出地址,由Appender指定,一个Logger可指定多个Appender,也就是说,相同的信息可同时输出到不同的地方,程序开发者可在调试时,让日志信息在输入日志文件的同时,向控制台也输出,以方便查看程序运行状态。

与日志级别一样,Appender也会根据Logger的层次关系继承父级Logger的所有Appender

对于Logger的层次关系, Short introduction to log4j:

http://logging.apache.org/log4j/docs/manual.html中有较详细的介绍和例子。
二、Appender

以上已经提到,Appender用来配置日志信息的输出地址,包括控制台,文件等:

Currently, appenders exist for the console, files, GUI components, remote socket servers, JMS, NT Event Loggers, and remote UNIX Syslog daemons. It is also possible to log asynchronously.
以上不同用途和不同输出地址都有对应的Appender,下面列举几个常用的Appender:

ConsoleAppender :将日志信息输出到控制台
FileAppender: 将日志信息输出到普通文本文件
DailyRollingFileAppender: 将日志信息输出到普通文本文件,并每天自动产生新日志文件,在前一天的日志文件名后追加日期,追加的信息格式可由用户自己定义
RollingFileAppender:文件大小到达指定尺寸时,产生一个新的文件
WriterAppender:将日志信息以流格式发送到任意指定的地方
对于将日志输出到文件的Appender,还要考虑一个文件字符集编码的问题。默认情况下,Log4j将日志信息按照本地系统编码输出到文件,为了使其按照指定编码生成日志文件,则需要指定编码方式。

在我自己的使用过程中,编码的问题困扰了我很久,因为在我使用DailyRollingFileAppender的setEncoding()方法时,发现输出的日志文件并没有按照我指定的编码保存,后来才发现,在程序中设定完Appender的属性后,一定要调用Appender的activateOptions()方法,才能使设置生效。

下面是我出问题的代码:

DailyRollingFileAppender fileAppender = new DailyRollingFileAppender (Layout, filepath, datepattern);

fileAppender.setName("fileAppender");

fileAppender.setEncoding("utf-8");
按照以上方式设定日志文件的编码将失效,日志文件并不会按照设定的编码方式保存。

下面是修改后的编码:

DailyRollingFileAppender fileAppender = new DailyRollingFileAppender (Layout, filepath, datepattern);
fileAppender.setName("fileAppender");
fileAppender.setEncoding("utf-8");
fileAppender.activateOptions();

三、Layout

Log4j中提供了对日志信息输出格式进行定制的类,称为Layout类,其可作为Appender的属性添加到Appender中。常用的Layout类有:

org.apache.log4j.HTMLLayout :以HTML表格形式布局
org.apache.log4j.PatternLayout :可以灵活地指定布局模式
org.apache.log4j.SimpleLayout :包含日志信息的级别和信息字符串
org.apache.log4j.TTCCLayout :包含日志产生的时间、线程、类别等等信息
其中最灵活的Layout类为PatternLayout,用户可对其日志信息输出格式进行完全自由的定制,通过在pattern字符串中的特殊字符来控制。

在Log4j的官方网站中,对pattenr字符串中特殊字符的意义和用法有详细的介绍和举例:http://logging.apache.org/log4j/docs/api/org/apache/log4j/PatternLayout.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值