Java 标准日志工具 Log4j 的使用(附源代码)

源代码下载

Log4j 是事实上的 Java 标准日志工具。会不会用 Log4j 在一定程度上可以说是衡量一个开发人员是否是一位合格的 Java 程序员的标准。如果你是一名 Java 程序员,如果你还不会用 Log4j,那你真的很有必要读一下这篇文章了。很多朋友反映想写程序日志,但是却不知道怎么把日志写到日志文件里,而且 Java 这方面的资料似乎不多。如《如何写log4j.xml日志配置文件》 所述。本文详细介绍了如何在项目中使用 Log4j 的步骤,并附加了一个例子性质的代码。
        Why Log4j? 
        有的朋友喜欢用 System.out.println(String msg); 语句来调试代码。这个确实是一个很好的调试工具。但是随着项目的结束,或者问题的解决,这些语句需要我们一个个地揪出来手工删除?《如何一次性删除所有的system.out.println语句 》,这个帖子里的这位网友就遇到了这样一个问题。
        全部都删除干净,问题又来了:如果以后又出现问题了该怎么办呢?难道再次添加,问题解决后再次查找到删除?
        使用 Log4j 就可以很好地解决上面的问题和矛盾。Log4j 有一个日志级别,用来控制是否进行日志记录。其由低到高的级别如下:
ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF 
        将日志进行分级的目的就是在于可以灵活配置。比如说如果日志级别限定于 DEBUG,那么包括 DEBUG 在内的,INFO、WARN、ERROR、FATAL、OFF 都会进行日志记录;而如果级别定义为 INFO,那么 INFO 以下的级别,像 DEBUG 的日志就不会记录。比如如下代码:

[java] view plain copy

print?

  1. Logger log = LogManager.getLogger(HelloWorld.class);
  2. log.info("info通过 class 对象来获取 logger 对象");
  3. log.debug("debug通过 class 对象来获取 logger 对象");
  4. log.warn("warn通过 class 对象来获取 logger 对象");

如果你的 Log4j 定义为输出到控制台,日志级别定义为 INFO,那么执行到上面语句块,控制台会输出以下日志信息:
18:07:37,237 INFOHelloWorld:32 - info通过 class 对象来获取 logger 对象
18:07:37,245 WARNHelloWorld:34 - warn通过 class 对象来获取 logger 对象 
        具体范例作者已经上传至附件,有兴趣的朋友可以去下载下来看看。限于时间,例子里仅仅演示了如何将日志信息输出到控制台上。当然,日志也可以输出到文件、数据库中。作者认为,如果弄清楚了示例代码,对于其他实现聪明的读者完全可以参考 Log4j 的 API 自己搞定。
        How to Log4j? 
        第一步:下载 Log4j 工具包 。
        官方网站地址:http://logging.apache.org/log4j/1.2/index.html。进入后左侧菜单栏里 Documentation 下的 JavaDoc 就是 Log4j 的在线 API 文档。我们点击 Get log4j 1.2 下 的 Download 进入下载页面,最新版本是 1.2.15,点击 apache-log4j-1.2.15.zip 进行下载该文件,解压缩后得到 Log4j 的源代码、示例代码、安装说明和 Log4j 的 jar 包(log4j-1.2.15.jar)。
        第二步:项目中导入 log4j 的 jar 包 。
        作者开发 IDE 是 eclipse,右击项目名 -> Build Path -> Configure Build Path -> Add External JARS -> 找到你解压缩得到的 log4j-1.2.15.jar 并选中。确定。
        第三步:编辑 log4j.properties 文件,配置你的 Log4j 。
        在项目的 src 目录下,新建 log4j.properties 文件。通过这个接口对 Log4j 进行配置。
        示例代码中作者的 log4j.properties 配置如下:

[java] view plain copy

print?

  1. ### logger 的配置 ###
  2. #配置根 logger
  3. log4j.rootLogger=INFO,stdout
  4. ### direct log messages to stdout ###(标准的终端输出)
  5. #控制台输出
  6. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  7. #自定义输出布局
  8. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  9. #输出的格式
  10. log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}%5p%c{1}:%L - %m%n

说明:
        “log4j.rootLogger=INFO,stdout”句:定义根 logger 配置项。其语法为:级别,输入终端1,输出终端2,……。stdout 代表日志输出到控制台。
        “log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}%5p%c{1}:%L - %m%n”语句定义打印格式。打印参数如下:
%m:输出代码中指定的消息。
%p:输出优先级。
%r:输入自应用启动到输出该log信息耗费的毫秒数。
%c:输出所属的类目,通常就是所在类的全名。
%t:输出产生该日志线程的线程名。
%n:输出一个回车换行符。Windows平台为“/r/n”,UNIX为“/n”。
%d:输出日志时间点的日期或时间,默认格式为ISO8601,推荐使用“%d{ABSOLUTE}”,这个输出格式形如:“2007-05-07 18:23:23,500”,符合中国人习惯。
%l:输出日志事件发生的位置,包括类名、线程名,以及所在代码的行数。 
        第四步:代码中需要日志记录的地方进行日志代码 。
        通过 Logger log = LogManager.getLogger(你要进行日志的代码所在的类.class);获取 logger 对象,然后调用其 info、debug 等方法进行日志输出。示例代码如下:

[java] view plain copy

print?

  1. /**
  2. * 文件名:HelloWorld.java
  3. *
  4. * 版本信息:
  5. * 日期:2010-1-18
  6. * Copyright XXX Corporation 2010
  7. * 版权所有
  8. *
  9. */
  10. package com.defonds.log4j;
  11. import org.apache.log4j.LogManager;
  12. import org.apache.log4j.Logger;
  13. /**
  14. *
  15. * 项目名称:TestLog4j
  16. * 类名称:HelloWorld
  17. * 类描述:Log4j 测试类
  18. * 创建人:Defonds
  19. * 创建时间:2010-1-18 下午02:58:18
  20. * 修改人:Defonds
  21. * 修改时间:2010-1-18 下午02:58:18
  22. * 修改备注:
  23. * @version
  24. *
  25. */
  26. public class HelloWorld {
  27. public static void main(String[] args) {
  28. Logger log = LogManager.getLogger(HelloWorld.class);
  29. log.info("info通过 class 对象来获取 logger 对象");
  30. log.debug("debug通过 class 对象来获取 logger 对象");
  31. log.warn("warn通过 class 对象来获取 logger 对象");
  32. }
  33. }

再次说明:本示例只是让没有用过 Log4j 的朋友进行入门级的认识,Log4j 强大的日志记录功能不仅与此。更多 Log4j 的日志功能,还需要读者在项目中自己去切身体会认识。

时间: 2024-08-29 10:11:37

Java 标准日志工具 Log4j 的使用(附源代码)的相关文章

Java设计模式-代理模式之动态代理(附源代码分析)

Java设计模式-代理模式之动态代理(附源代码分析) 动态代理概念及类图 上一篇中介绍了静态代理,动态代理跟静态代理一个最大的差别就是:动态代理是在执行时刻动态的创建出代理类及其对象. 上篇中的静态代理是在编译的时候就确定了代理类详细类型.假设有多个类须要代理.那么就得创建多个. 另一点,假设Subject中新增了一个方法,那么相应的实现接口的类中也要相应的实现这些方法. 动态代理的做法:在执行时刻.能够动态创建出一个实现了多个接口的代理类.每一个代理类的对象都会关联一个表示内部处理逻辑的Inv

日志工具 Log4j

可以在配置文件中配置 日志输出级别.输出样式.输出目的地,很灵活. 输出级别包括:ALL .TRACE(跟踪).DEBUG(调试).INFO .WARNING.ERROR.FITAL (致命) .OFF 如何在一个类中使用Log4j  1.首先需要去下载 apache出的 log4j 的包 导入到构建路径中 2.常见的使用场景如下 : 1 import org.apache.log4j.Logger; 2 3 public class A{ 4 5 public static Logger lo

Java 常用的日志工具——JDK自带的java.util.logging包、APACHE 的log4j 与 slf4j日志处理接口

考虑以下情况: (1).根据程序输出可以很好地帮助程序员调试程序.在编写小型程序时,可以在程序中不断增加 System.out.print() 语句来查看程序运行状态:在大型系统中,显然这一做法非常不对,可以考虑将调试信息通过日志处理工具,输出到一个文本文件中,然后查看文件内容. (2).在系统开始线上运行后,系统管理人员需要获知系统的运行情况,包括但不限于系统开始运行时间.系统关闭时间.系统目前处理任务等,这些状态需要输出到一个经过格式化的日志文件中,供管理人员查看: (3).在编写系统,甚至

Java 基于log4j的日志工具类

Java 基于log4j的日志工具类 对log4j日志类进行了简单封装,使用该封装类的优势在于以下两点: 1.不必在每个类中去创建对象,直接类名 + 方法即可 2.可以很方便的打印出堆栈信息 package com.tradeplatform.receiveorder.util; import java.io.PrintWriter; import java.io.StringWriter; import org.apache.log4j.Logger; /** * @Description 日

Java中的日志——Java.util.logging、log4j、commons-logging

Java中给项目程序添加log主要有三种方式,一使用JDK中的java.util.logging包,一种是log4j,一种是commons-logging.其中log4j和commons-logging都是apache软件基金会的开源项目.这三种方式的区别如下: Java.util.logging,JDK标准库中的类,是JDK 1.4 版本之后添加的日志记录的功能包. log4j,最强大的记录日志的方式.可以通过配置 .properties 或是 .xml 的文件, 配置日志的目的地,格式等等.

跟王老师学异常(八):开源日志记录工具log4j的使用案例

开源日志记录工具log4j的使用 主讲人:王少华  QQ群号:483773664 学习目标 掌握Log4J在java项目中的应用 一.日志分类及log4j介绍 (一)日志及分类 1 日志 主要用来记录系统运行中一些重要操作信息 便于监视系统运行情况,帮助用户提前发现和避开可能出现的问题,或者出现问题后根据日志找到原因 2.分类 SQL日志:记录系统执行的SQL语句 异常日志:记录系统运行中发生的异常事件 业务日志:记录系统运行过程.如用户登录.操作记录 (二)Log4j介绍 Log4j是Apac

Log4j 日志工具demo以及配置文件实例

在项目中产生日志是一个项目所必须的,现在用的比较广泛,比较流行的日志工具 就有 log4j :这个日志工具其实使用起来是很方便的:在使用的时候创建什么的都和java.util.logging.Logger一样的,而jdk的log日志信息的获取和导出是使用Handler 对象,而导出的信息的格式是通过Formatter对象来定义的而log4j的日志信息导入,以及格式是在配置文件中进行配置的.具体看下面: 1. 导入需要的架包:(1).log4j.jar  (2).commons-pool.jar

软件开发工程师(JAVA)中级考试大纲-----四(四)Log4J的原理及配置;Log4J常用的API;在项目中应用日志框架Log4J关键类和接口介绍;Java properties配置文件log

log4j Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程.最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码. 1定义 log4j--log for java(java的日志) 在强调可重用组件开发的今天,除了

java中的日志组件-log4j

1.为什么使用日志组件 Log4J是Apache的一个开放源代码项目,它是一个日志操作包,通过使用Log4J,可以指定日志信息输出的目的地,如控制台.文件.CUI组件.NT的事件记录器:还可以控制每一条日志输出格式.此外,通过定义日志信息的级别,能够非常细致地控制日志的输出,最令人感兴趣的是,这些功能可以通过一个配置文件来灵活进行配置,而不需要修改应程序代码. 在应用程序中输出日志有3个目的: 监视代码中变量的变化情况,把数据周期性记录到文件中供其他应用进行统计分析工作: 跟踪代码运行时轨迹,作