java 编程技术ITeye - 超凡娱乐

java 编程技术ITeye

2019年02月23日08时20分07秒 | 作者: 雨欣 | 标签: 日志,装备,信息 | 浏览: 3080

    Log4j实在是很熟悉,简直一切的Java项目都用它。可是我确一向没有搞了解。总算有一天我受不了了,定下心去看了一把文档,才两个小时,我总算搞了解了。一般情况下Log4j总是和Apache Commons-logging一重用的,我也就一同介绍吧。多了个东西不是更费事,而是更简略!


    一、Log4j的简略思维

    Log4j真的很简略,简略到令人发指的境地。不是要记载日志吗?那就给你一个Log,然后你用Log来写东西就行了,先来一个完好类示例:

packagetest;

importorg.apache.commons.logging.Log;

importorg.apache.commons.logging.LogFactory;

publicclass Test {

     static Log log = LogFactory.getLog(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");

     }

/**

* @param args

*/

     public static void main(String[] args) {

         Test test = new Test();

         test.log();

     }

}
     别怕,看完这篇文章你就会觉得很简略了。

     Log4j默许把日志信息分为五个等级

     debug info warn error fatal

     尽管能够自己增加等级,可是我觉得没有必要,五个够用了吧!你要写入信息的时分就把信息归为五个等级中的一个,然后调用相应的函数即可。


     分五个等级究竟有什么用呢?日志信息究竟写到哪里去了?

     “LogFactory.getLog(Test.class)”又是什么意思捏?接着往下看吧!


    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。


     那详细的Log特点是在哪里界说的呢?


    二、常见的装备文件

    尽管能够用xml或许在运行时用Java来装备Log4j,但仍是properties文件好用啊!

    log4j.rootLogger=info,stdout

    log4j.appender.stdout=org.apache.log4j.ConsoleAppender

    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

    #Pattern to output the callers file name and line number.

    log4j.appender.stdout.layout.ConversionPattern=%5p[%t] (%F:%L) - %m%n


    剖析一下:

    第 一行,装备log4j.rootLogger你了解吧。应为它是根,总得配 置一下,不然其他Log承继什么啊。其他的Log能够装备也能够不装备。等号后边的第一个参数表明日志等级,能够填五个等级中的一种,后边的参数都是让 Log知道输出到哪里,假如你想让日志输出到两个当地就加两个输出参数,比方:


    log4j.rootLogger=info, stdout, file


    这儿的info表明,该Log的日志等级为info,一切等级小于info的日志都不会被记载。比方运用这个装备文件的话,我刚开始举的那个类中


    log.debug("Debug info.");


    这句话是不起作用的,由于debug的等级小于info。这样就很简单操控什么信息在调试的时分要显现,什么信息在发布的时分要去掉。这些都不必改代码,很便利吧。


    但,stdout和file又是什么呢?

    接着往下看,就是装备stdout了,这个姓名是随意取的,你能够叫它A:


    log4j.appender.A=org.apache.log4j.ConsoleAppender


    那么上面的rootLogger的参数stdout也要改成A,其他用到的当地当然也要改。这儿的要害不是姓名,而是appender类型,比方这儿的 “ConsoleAppender”,看了解了吧,输出到 Console。后边两行都是设置日志格局的,一般情况下你就照抄吧。既然是最简入门重视于了解Log4j的作业原理,我就不介绍file类型的 appender了,一搜一大把。


    在实践的项目开发中,很可能遇到所引证的包用Log4j来记载日志,比方Hibernate。那么在这儿你能够很简单的操控这个包怎么记载日志。比方在上面的装备文件中加一行:


    log4j.logger.org.hibernate=fatal


    那么一切org.hibernate包下面的类就只会显现很少的信息,由于fatal的等级最高啊。


三、布置

    别怕,这可不是布置Tomcat。把log4j的包和commons- logging的包(加在一同才两个)放到classpath下面。然后把装备文件保存为log4j.properties,也放在classpath下 面(假如用Eclipse的话,放在src目录下即可)。然后你就能够跑了。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表超凡娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章