当前位置:  技术问答>java相关

[重谢]哪位手把手教下如何使用Log4J,请给出具体步骤

    来源: 互联网  发布时间:2015-09-28

    本文导语:  Log4J的手册看得不明白 请高人指点一下 给一下使用的步骤(要求按着步骤就能跑起来) 非常感谢 | Log4j的基本应用 Introduction     Log4j 是一个开源代码的项目(Open source project),它使开发人员...

Log4J的手册看得不明白

请高人指点一下

给一下使用的步骤(要求按着步骤就能跑起来)

非常感谢

|
Log4j的基本应用

Introduction
    Log4j 是一个开源代码的项目(Open source project),它使开发人员能最大限度的灵活控制程序调试信息的输出,这一点它是通过额外的配置文件实现的。而且log4j 开发包很容易上手,同时可能会使一些开发人员上瘾。
    绝大多数的大型开发项目都有它们自己专门用于记录程序日志和对程序跟踪调试的API。许多经验证明,调试信息的管理在软件开发过程中扮演了十分重要的角色。日志管理通常提供了以下的几点好处:首先,它能在程序运行过程中精确的提供运行时的上下文(context)方便我开发人员找到 BUG,一旦在程序中加入了Log 输出的代码,程序运行过程中就能自动的生成并输出logging信息。其次,log信息可以输出到不同的地方(控制台,文件,日志服务器等等)以备时候研究。最后,除了在开发过程中发挥它的作用外,一个功能足够强大的日志记录开发包能当作一个审计工具(audit tool)使用。
    为了能够适应以上的规律,早在1996年 EU SEMPER(Secure Electronic Marketplace for Europe) 项目组决定开发自己的日志管理开发包(tracing API),经过了无数次的改动和功能加强,最终诞生了log4j —— 一个十分广受欢迎的java logging 开发工具包。这个开发工具包的发行遵循 IBM Public License,certified by the open source initiative。
    同时,Logging 确实也存在一些缺陷,比如,它影响了程序运行的速度,增加了代码的开销,增加了许多无谓的输出。为了减少这些负面因数的影响,log4j 被设计得尽量的高效和灵活。因为,很少有哪个应用程序(系统)把记录日志当作主要的功能,log4j的开发人员尽量使log4j容易理解和使用。
    这篇文章首先描述log4j的大致框架和重要的组成部分。作者通过一些简单的例子来说明如何使用log4j。

Categories,appenders,and layouts

Log4j最主要的三大基本构件:

1.Categories(对log信息进行分类筛选,通俗的讲就是什么信息应该被输出,什么log信息应该被忽略)
2.Appenders(定义了log信息输出的设备,log信息应该被输出到什么地方,控制台、文件、网络设备等)
3.Layouts(对log信息进行格式化)
软件开发人员能通过这三大构件实现根据日志的类型和优先级进行记录,并且能在程序运行时去控制log 信息输出的格式(formatted)和往什么地方输出(控制台、log文件),让我们依次去了解他们。

Category hierarchy
    与System.out.println 方式输出调试信息相比,一个专门的日志控制工具(logging API)的最组要优点在于它能够在适当的时候关闭一些调试信息输出以不影响其他人的调试。这种能力的实现决定于程序开发人员能够根据一定的标准对这些logging 信息进行分类。
    基于以上原则,org.apache.log4j.Category 类实现了整个log4j包的核心,调试信息被根据一般开发人员的习惯进行了分类并命名。和java开发包的分类规则类似,(a category is said to be a parent of another category if its name followed by a dot, is a profix of the child category name. ) 比如,命名为com.foo 的category 是被命名为com.foo.Bar 的category的parent.就象我们习惯的java是java.util 的parent,并且是java.util.vector 的ancestor一样。
    最上层的Category被称为根(root category),根category有两个特点:
(1)它总是存在(It always exists)
(2)它的名字不能被直接得到
    在Category 类里面,我们通过getRoot()方法得到root category。而静态方法getInstance()实例化所有其他的Category. getInstance()通过调用时传递的叁数得到该被实例化的Category的实例名。 Category类的其它方法在下面列出:
package org.apache.log4j;
public Category class {
// Creation & retrieval methods:
public static Category getRoot();
public static Category getInstance(String name);
// printing methods:
public void debug(String message);
public void info(String message);
public void warn(String message);
public void error(String message);
// generic printing method:
public void log(Priority p, String message);
}
    我们可以通过org.apache.log4j.Priority类中的set 方法定义一个Category的优先级。(设置的Category的优先级别和传统的Unix Syslog 定义的级别一样)。但log4j仅鼓励使用以下的四个优先级别:ERROR,WARN,INFO 和DEBUG, 这四个级别的优先级为ERROR>WARN>INFO>DEBUG。但org.apache.log4j.Propority中的set方法提供了更高的灵活性,即用户可以通过Priority类的子类去定义自己的优先级。如果一个 category没有被定义自己的优先级别,它将继承最接近的祖先所定义的优先级别。这样就保证了所有的Category最终都继承一个优先级别(因为根category总是有一个默认的优先级定义)。
    我们获得了一个Category 的实例以后,就可以通过调用以下的方法输出调试信息:
1.error() 输出ERROR级别的调试信息
2.warn() 输出WARN级别的调试信息
3.info() 输出INFO 级别的调试信息
4.debug() 输出 DEBUG 级别的调试信息
5.log() 普通的LOG 信息
    根据定义,以上的5个方法将自己判断输出信息的优先级别。打个比方,假如c 是一个Category 类的实例,那么语句c.info(“……”) 只有在优先级达到INFO级的输出请求(A logging request)时候才被执行。
    日志输出请求(A logging request) 是指当调试级别高于或等于该级别的时候才被允许执行。否则,被认为这个日志输出请求为不允许,一个没有被定义优先级别的category 将自动根据层次关系从它的parent 或 ancestor 继承优先级别。
    通过下面的程序段,你将发现这个规则:
// get a category instance named "com.foo"
Category cat = Category.getInstance("com.foo");
// Now set its priority.
cat.setPriority(Priority.INFO);
Category barcat = Category.getInstance("com.foo.Bar");
// This request is enabled, because WARN >= INFO.
cat.warn("Low fuel level.");
// This request is disabled, because DEBUG = INFO.
barcat.info("Located nearest gas station.");
// This request is disabled, because DEBUG 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 大家帮我找点linux下c的多线程资料,重谢
  • 请帮忙解决一下,重谢!
  • 麻烦那位大侠说一下,电子商务的机制,重谢!
  • 请问那里有HTTPUNIT下载,高分重谢!!!请帮忙UP!急用!
  • 谁有Borland Enterprise Server的序列号,重谢!!!(在线给分)
  • 必有重谢
  • 哪位能提供struts结构的论坛小弟有重谢,给分
  • 急啊,谁能帮忙分析一下,必有重谢!
  • 用过WINCVS管理JAVA PROJECT的兄弟们能谈谈经验感受么??(定有重谢,我会加分的)
  • 那位大哥给我一个hp-ux的测试ip(重谢!)
  • 紧急问题,重谢!
  • 谁有itext 0.96版的jar包,做PDF用的 100分重谢!!!
  • 谁知道KawaEnt5.0(企业版)的注册码?重谢!
  • 我急了,帮帮我,重谢!!!
  • 小弟是新来的菜鸟,散点分请各位以后多多帮忙,重谢第一个进来恭贺开张的
  • 谁帮我解决SCO UNIX5.05安装问题,500分重谢,高手进来看看吧!
  • 请各位DOS老妖怪给俺推荐几本最好的书,关于DOS和汇编编程的,有重谢(内容同)
  • 为什么在安装oracle9i在最后建立数据库时出现以下问题(解决立即给分,重谢)
  • 重谢: FC5 下GCC 4.1.0 编译器存在BUG? error: invalid lvalue in assignment
  • 请问一些jsp的常识问题!望大侠们不惜指教!!重谢!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3