`
ssxxjjii
  • 浏览: 928681 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Log4j的简单入门

阅读更多

Log4j实在是很熟悉,几乎所有的Java项目都用它啊。但是我确一直没有搞明白。终于有一天我受不了了,定下心去看了一把文档,才两个小时,我终于搞明白了。一般情况下Log4j总是和Apache Commons-logging一起用的,我也就一起介绍吧。多了个东西不是更麻烦,而是更简单!


<!--[if !supportLists]-->一、<!--[endif]-->Log4j的简单思想

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

package test;

   

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

   

public class 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");

         }

   

       

         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属性是在哪里定义的呢?


<!--[if !supportLists]-->二、<!--[endif]-->常见的配置文件

虽然可以用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 caller's 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的级别最高啊。


<!--[if !supportLists]-->三、<!--[endif]-->部署

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

 

-------------------------------------

PatternLayout 的 格式字元列表如下:

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: %m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

分享到:
评论

相关推荐

    log4J最简单入门

    很经典的一个入门教程!里面的内容是log4J的基本入门配置!希望对大伙有帮助哦!!!

    log4j 入门程序

    自己写的log4j的入门程序,对log4j中几种级别的日志输出进行了测试,程序简单易懂

    java学习log4j详细文档和入门工程

    包含一个log4j的ppt 一个log4j的文档 一个简单的java的log4j工程,含有所需要的jar包

    log4j入门使用文档

    log4j使用文档,这篇文档属于入门级的,适合初学者和想要查询简单语句的人观看

    log4j-user-guide

    log4j的用户指南,适合新手阅读学习。英文版本,但是都是比较简单的英语。log4j本身也比较简单,因此很适合作为英文文档的入门读物。

    log4j实例.rar

    该实例是一个关于log4j的实例,简单易懂,是log4j入门的绝佳资料

    log4j使用案例

    用于日志到控制台或者文件中的log4j使用案例,工程中含有log4j的jar包,log4j使用简介,log4j的配置文件,还有一个入门的案例,简单使用,即学即会,适合入门者。

    最简单的Hibernate入门简介

    然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西,比:Tomcat,Eclipse,Log4J,Struts,XDoclet,甚至JBoss。这容易让人产生Hibernate复杂难懂的误解,特别是打击了初学者的积极性。在这篇文章将不涉及...

    slf4j使用手册

    简单介绍了SLF4J的功能,结构,并介绍了其常用的log实现框架log4j的appender结构,是slf4j新手非常不错的入门手册,这可以我自已编写的.欢迎大家指正.

    CXF 2.3.4 入门简单例子

    2.需要JDK5,cxf 2.3.4 log4j 使用步骤: project-&gt;properties-&gt;build path-&gt;library 增加cxf2.3.4 lib目录下所有libraries 及log4j的jar。 project: 1.根据用户传入的cityid,可以得知这个city 的天气情况。 2....

    dubbo-demo 简单入门例子

    上述demo按照快速开发文档编写,并且修改了读取配置文件的方式,新增log4j和zookeeper

    log4Net详解(共2讲)

    4、项目实战篇: Extjs3.2+ASP.NET七层架构+设计模式+ log4j+WebSerice等技术国讯教育通用智能OA办公平台 适用对象 1、要求有一定的javascript语言和HTML,CSS基础的学员 2、有一定的Asp.net网页编程基础和C#语言...

    MyBatis入门之增删改查源码

    MyBatis入门之增删改查: ①实现模拟业务连接数据库的增删改查 ②log4j日志配置 ③MyBatis所需jar包

    ice入门例子2

    这是继ice入门例子的第二个例子,主要讲述Ice.Application与配置文件的简单使用 所需jar在lib中 这个例子中集成了日志插件...日志产生的文件在log4j.properties配置中定死为D:/icelogs/文件夹中,你自己可以随意更改

    struts1+mysql的入门登陆例子

    供初学者使用,struts1和mysql数据库,简单的登录跳转,包括了log4j和访问properties文件,

    Toad 使用快速入门

    四、Toad使用快速入门 1. Schema Browser: Schema browser是Toad的极为有特色的模块。在schema browser的帮助下,可以方便的浏览数据库内部的各类数据库对象,比如表,索引,序列,存储过程等,而且可以方便的倒出...

    hibernate入门小示例

    hibernate入门小示例,平台环境 myeclipse + oracle, 使用junit对hibernate的简单增删改查进行验证,并实现日志记录。

    springboot学习

    chapter4-2-3:对log4j进行多环境不同日志级别的控制 chapter4-2-4:使用AOP统一处理Web请求日志 chapter4-2-5:使用log4j记录日志到MongoDB chapter4-2-6:Spring Boot 1.5.x新特性:动态修改日志级别] 安全管理 ...

    spring AOP 实例(@AspectJ)

    一个基于@AspectJ的spring2.0 AOP应用实例,很小很简单,没有任何额外信息,最适合AOP入门学习。使用log4j打印信息。把项目直接import进myeclipse就可以使用啦......

    网管教程 从入门到精通软件篇.txt

    网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的...

Global site tag (gtag.js) - Google Analytics