junctioner

再学习log4j笔记

log4j,字面意思就是针对j(Java)的日志。
log4j,可以记录显示Java程序运行的每一步的数据,相当于System.out.print,不过,它是以一个日志文件显示所标识的运行信息,不用在java运行显示台上看输出信息,比较方面。
log4j,记录的数据,可以作为判断程序运行状态的重要依据,更多的应是查找程序运行BUG的重要依据,特别是程序已发布,不能做单步调试的情况下,它的优越性就突显出来了。
引用一个对log4j的功能比较专业的描述:

1、监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;
2、跟踪代码运行时轨迹,作为日后审计的依据;
3、担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。

以前偶尔的用过几次,但一次没形成习惯和一套良好的应用机制,自咎主要原因是对log4j掌握的还是不够,亟待提升。

今天就花时间找些资源研究研究。

在网上搜到一些文章,首先看的是IBM中国网站上的一篇技术文章(http://www-128.ibm.com/developerworks/cn/java/l-log4j/index.html)讲得比较基础,也很详细,对log4j的使用讲得全面而贴切,甚利于初次学习,发表日期是2002/6/19(有点早)。

1、去网站(http://logging.apache.org/log4j/docs/download.html)下载log4j的jar包,直接下载log4j-1.2.13版链接:http://mirror.vmmatrix.net/apache/logging/log4j/1.2.13/logging-log4j-1.2.13.zip
2、解开log4j.jar文件放到web应用程序的WEB-INF/lib下面;
3、编写文件名为log4j.properties 配置文件到java源文件的根目录中;
4、在自己的程序中构建日志记录器;
5、利用记录器标识要输入的信息。

第二步如果是在java的一般应用程序中应用log4j,则在环境变量CLASSPATH中添加一个指向log4j.jar的值。
第三步把命名为log4j.properties的log4j配置文件放在java源文件目录中是一个简洁的办法,可以在程序中自定义的指定log4j的配置文件,配置文件名称和存放路径都可自定义。

当获得了日志记录器之后,第二步将配置Log4j环境,其语法为: 
BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。 
PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。 
DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。

Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值)。下面引用的是使用Java特性文件做为配置文件的方法(不用XML解析器):

配置根Logger,其语法为: 
log4j.rootLogger = [ level ] , appenderName, appenderName, …

其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。 
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。 
配置日志信息输出目的地Appender,其语法为 
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1

log4j.appender.appenderName.option = valueN其中,Log4j提供的appender有以下几种: 
org.apache.log4j.ConsoleAppender(控制台), 
org.apache.log4j.FileAppender(文件), 
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), 
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) 
配置日志信息的格式(布局),其语法为: 
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1

log4j.appender.appenderName.layout.option = valueN其中,Log4j提供的layout有以下几种: 
org.apache.log4j.HTMLLayout(以HTML表格形式布局), 
org.apache.log4j.PatternLayout(可以灵活地指定布局模式), 
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), 
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) 

下面是一个log4j配置文件的例子(内容不含前面的行号):
 1log4j.rootLogger=INFO, A1 , R
 2
 3log4j.appender.A1=org.apache.log4j.ConsoleAppender 
 4log4j.appender.A1.layout=org.apache.log4j.PatternLayout 
 5log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n 
 6
 7log4j.appender.R=org.apache.log4j.RollingFileAppender
 8log4j.appender.R.File=$TOMCAT_HOME/logs/log4j.log
 9##将$TOMCAT_HOME换成tomcat的安装目录,也可以指定一个存在的任意目录
10log4j.appender.R.MaxFileSize=100KB
11log4j.appender.R.MaxBackupIndex=1
12log4j.appender.R.layout=org.apache.log4j.PatternLayout
13log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n


第1行的值INFO,表示输出INFO级以上的日志,如果设成OFF则表示不输出,A1和R是自定义的两种输出方式(可以自定义n种输出方式),其详细内容在后面有定义;
第3行定义A1是输出到控制台;
第7行定义R是输出到文件,并且控制文件在指定大小,超过指定大小自动按指定形式创建一个新名称的日志文件;

一般是以指定格式的文本输出日志,输出比较快捷,也可以定义HTML格式的日志输出,阅读方便,但稍微有点慢。

现在,可以象使用System.out.println一样标识程序输出信息了看一个在程序中应用log4j的简单例子。
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
import org.apache.log4j.FileAppender;
public class simpandfile {
    //获取log4j日志记录器
   
static Logger logger = Logger.getLogger(simpandfile.class);
   
public static void main(String args[]) {
       //新建一个日志输出样式
      SimpleLayout layout 
= new SimpleLayout();

      FileAppender appender 
= null;
      
try {
           //定义输出文件
         appender 
= new FileAppender(layout,"output1.txt",false);
      }
 catch(Exception e) {}

      logger.addAppender(appender);
       //设置日志输出等级为DEBUG
      logger.setLevel((Level) Level.DEBUG);
      //以各种等级标识输出信息
      logger.debug(
"Here is some DEBUG");
      logger.info(
"Here is some INFO");
      logger.warn(
"Here is some WARN");
      logger.error(
"Here is some ERROR");
      logger.fatal(
"Here is some FATAL");
   }

}

如果定义了log4j的输出配置文件,在程序中获取日志记录器后就可以直接标识日志输出信息。

[***] 在判断DEBUG/INFO级别的信息是否要加入日志文件前,记录器提供isDebugEnabled()/isInfoEnabled()方法判断当前级别是否激活,这样处理减少日志处理信息时再判断当前级别是否激活消耗的资源,提高运行性能。

补加:

刚发现log4e(http://log4e.jayefem.de/index.php/Download)这个eclipse的插件,它实现的功能是鼠标点击几下,就可以自动生产log标识,免去手敲的体力。
至于怎么用,就很简单了,跟它的插件一样安装,装完后,在eclipse的编辑区右键菜单中会多一个log4e项,所有操作都在这里了。

posted on 2006-02-13 10:52 junctioner 阅读(3799) 评论(0)  编辑  收藏 所属分类: 技术之路


只有注册用户登录后才能发表评论。


网站导航:
 
<2006年2月>
2930311234
567891011
12131415161718
19202122232425
2627281234
567891011

导航

统计

常用链接

留言簿(8)

随笔分类

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜