zoukankan      html  css  js  c++  java
  • Apache Log4j使用实例

    本文将介绍如何在程序中使用Log4j。
    author: ZJ 07-3-17
    1.Logger类
    通过Logger类的静态方法Logger.getRootLogger得到RootLogger。所有其他的loggers是通过静态方法Logger.getLogger来实例化并获取的。这个方法Logger.getLogger把所想要的logger的名字作为参数。 Logger类的一些其它基本方法在下面列出:
    Logger x = Logger.getLogger("wombat");
    Logger y = Logger.getLogger("wombat");
    x和y指向完全相同的logger对象。
    3.Log4j使用流程
    1)根据配置文件初始化log4j
           log4j可以使用3种配置器来初始化:
    BasicConfigurator,DOMConfigurator,PropertyConfigurator。
    这里用的是PropertyConfigurator。使用PropertyConfigurator适用于所有的系统。如下的语句。
    private static Logger log = Logger.getLogger("MyCLASS.class");
     
    4)使用Logger对象的debug,info,fatal...方法。
    import org.apache.log4j.Logger;
     
    public class Test {
        static Logger log= Logger.getLogger(Test.class);
        public void log(){
           log.debug("Debug info.");
           log.info("Info info");
           log.warn("Warn info");
           log.error("Error info");
           log.fatal("Fatal info");
        }
        public static void main(String[] args) {
           Test test = new Test();
           test.log();
        }
    }
     
    Log4j.properties(具体配置属性定义见《Log4j配置说明》)
    log4j.rootLogger=info, stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    # Pattern to output the caller's file name and line number.
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
     
    结果
    INFO [main] (Test.java:16) - Info info
    WARN [main] (Test.java:17) - Warn info
    ERROR [main] (Test.java:18) - Error info
    FATAL [main] (Test.java:19) - Fatal info
     
    分析:
    Test.java
    “Logger.getLogger(Test.class);”这里的“Test.class”事实上传进去的是Test这个类的完整路径(包名+类名),“test.Test”。这样如果存在“test”这个Log那么Test这个Log就继承它,否则就继承rootLogger。
     
    Log4j.properties
    第一行,配置log4j.rootLogger。应为它是根,必须配置,否则别的Log无法继承。其他的Log可以配置也可以不配置。等号后面的第一个参数表示日志级别,可以填五个级别中的一种(Log4j默认把日志信息分为五个等级debug < info < warn < error < fatal),后面的参数都是让Log知道输出到哪里,如果你想让日志输出到两个地方就加两个输出参数,比如:
    log.debug("Debug info.");
    这句话是不起作用的,因为debug的级别小于info。这样就很容易控制什么信息在调试的时候要显示,什么信息在发布的时候要去掉。这些都不用改代码。
          配置stdout,这个名字是随便取的,你可以叫它A:
    log4j.appender.A=org.apache.log4j.ConsoleAppender
    那么上面的rootLogger的参数stdout也要改成A,其他用到的地方当然也要改。这里的关键不是名字,而是appender类型,比如这里的“ConsoleAppender”,指输出到Console。后面两行都是设置日志格式的。
    5.Apache Log介绍集
    6.参考资料
    [1] Log4j官方手册
    [2] Log4j最简入门

    http://afront.bokee.com/6157060.html


    Log4j的关键之处在于它的继承思想。也就是一个Log可以继承另外一个Log的属性(输出到哪里,日志等级,日志格式等等)。怎么继承?

    Log4j是根据Log的名字来判断继承关系的,比如:

    名字为“com.zhlmmc.lib”的Log就是“com.zhlmmc.lib.log”的parent,明白了吧!Log4j还有一个rootLogger,相当于Java的Object。

    回过头来看“LogFactory.getLog(Test.class)”这里的“Test.class”事实上传进去的是Test这个类的完整路径(包名+类名),“test.Test”。这样如果存在“test”这个Log那么Test这个Log就继承它,否则就继承rootLogger。


    在实际的项目开发中,很可能遇到所引用的包用Log4j来记录日志,比如Hibernate。那么在这里你可以很容易的控制这个包如何记录日志。比如在上面的配置文件中加一行:

    log4j.logger.org.hibernate=fatal

           那么所有org.hibernate包下面的类就只会显示很少的信息,因为fatal的级别最高啊。


  • 相关阅读:
    基础很重要~~04.表表达式-上篇
    【T-SQL基础】03.子查询
    【T-SQL基础】02.联接查询
    【T-SQL基础】01.单表查询-几道sql查询题
    【.Net底层剖析】3.用IL来理解属性
    SQL-基础知识
    IL指令速查
    黑客成长之路-01.新手篇-设置路由器
    《拆掉思维里的墙》~~想跳槽的同学可以先看看这本书!
    【解决方案】安装vssdk_full.exe遇到的问题
  • 原文地址:https://www.cnblogs.com/ycpanda/p/3637335.html
Copyright © 2011-2022 走看看