Log4j 基本学习入门

wangyanwy0209

贡献于2012-10-26

字数:0 关键词: 日志组件 log4j

Log4j 学习入门--ysWang 在 Web 应用中使用 Log4j Author:王永山  2007-9-17   Log4j 简介 在应用程序中输出日志有 3 个目的: ¾ 监视代码中变量的变化情况,把数据周期性地记录到文件中供其 他应用进行统计分析工作。 ¾ 跟踪代码运行时轨迹,作为日后审计的依据。 ¾ 担当集成开发环境中的调试器的作用,向文件或控制台打印代码 的调试信息。 Log4j 组成  Apache 为我们提供了一个强有力的日志操作包 Log4J。Log4J 主 要由三大组件构成: z Logger:负责生成日志,并能够对日志信息进行分类筛选,通俗 地讲就是决定什么日志信息应该被输出,什么日志信息应该被忽 略。 z Appender:定义了日志信息输出的目的地,指定日志信息应该被 输出到什么地方,这些地方可以是控制台、文件,网络设备等。 z Layout:指定日志信息的输出格式。 这 3 个组件协同工作,使得开发者能够依据日志信息类别去记录 Log4j 学习入门--ysWang 信息,并能够在程序运行期同,控制日志信息的输出格式以及日志存 放地点。 一个 Logger 可以有多个 Appender,这意味着日志信息可以同时 输出到多个设备上,每个 Appender 都对应一种 Layout,Layout 决定 了输出日志信息的格式。 假定根据实际需要,要求程序中的日志信息既能输出到程序运行 的控制台上,又能输出到指定的文件中,并且当日志信息输出到控制 合 时 采 用 SimpleLayout 布 局 , 当 日 志 信 息 输 出 到 文 件 时 采 用 PatternLayout 布局,此时 Logger、Appender 和 Layout3 个组件的 关系如图所示。 Logger 组件 Logger 是 Log4j 的核心组件,它代表了 Log4j 的日志记录器, 它能够对日志信息进行分类选择,就是决定什么日志信息应该被输 出,什么日志信息应该被忽略。 Logger 组件有 org.apache.log4j.Logger 类实现,它提供了如 下方法: Logger Layout (PatternLayout) Layout (SimpleLayout) Appender 2 (file) Appender 1 (console) 图 Logger、Appender 和 Layout 三个组件的关系 Log4j 学习入门--ysWang 可以在 Log4j 的配置文件中配置自己的 Logger 组件,例如以下 代码配置了一个 Logger 组件,名为 helloLogger: Log4j.logger.helloLogger=WARN 以上定义了一个 Logger 组件,名为 helloLogger,并为它分配 了一个日志级别(Priority),即“WARN”。一共有 5 中日志级别: FATAL、ERROR、WARN、INFO 和 DEBUG,其中 FATAL 日志级别最高,接 下来依次是 ERROR,WARN,INFO 和 DEBUG。 为什么要对日志分级别呢?试想一下,我们在写程序的时候,为 了调试程序,会在很多容易出错的地方输出大量的日志信息.当程序 调试完毕,不再需要输出这些日志信息了,那怎么办呢?以前的做法 是把每个程序中输出日志信息的代码删除。对于大的应用程序,这种 做法既费力又费时,几乎是不现实的。 Log4j 采用日志级别机制,简化了控制日志输出的步骤。获得了 一个 Logger 的实例以后,可以调用以下方注之一输出日志信息: z fatal(Object message):输出 FATAL 级别的日志信息 z error(Object message):输出 ERROR 级别的日志信息 Log4j 学习入门--ysWang z warn(Object message):输出 WARN 级别的日志信息 z info(Object message):输出 INFO 级别的日志信息 z debug(Object message):输出 DEBUG 级别的日志信息 z log(Priority p,Object message):输出参数 Priority 指定 级别的日志信息 对于这些输出日志的方法,只有当它输出日志的级别大于或等于 为 Logger 组件配置的日志级别时,这个方法才会被真正执行。对于 以上配置的 helloLogger.它的日志级别为 WARN,那么在程序中,它 的 fatal()、error()和 warn()方法会被执行.而 info()和 debug() 方法不会被执行。对于 log()方法,只有当它的参数 Priority 指定 的日志级别大于或等于 WARN 时,这个方法才会被执行。 假如不需要输出级别为 WARN 的日志信息,则可以把 helloLogger 组件的级别调高,如调到 ERROR 或 FATAL 级别,这样 WARN 级别和以 下级别的日志就不会输出,这比修改源程序显然方便得多。 Appender 组件 Log4j 的 Appender 组件决定将日志信息输出到什么地方。目前, Log4j 的 Appender 支持将日志信息输出到以下目的地: z 控制台(Console) z 文件(File) z GUI 组件(GUI component) z 套接口服务器(Remote socket server) Log4j 学习入门--ysWang z NT 的事件记录器(NT Event Logger) z UNIX Syslog 守护进程(Remote UNIX Syslog daemon) 一个 Logger 可以同时对应多个 Appender,也就是说,一个 Logger 的日志信息可以同时输出到多个目的地。例如,要为 helloLogger 配 置两个 Appender:一个是 File,一个是 console,则可以采用如下配 置代码: log4j.logger.helloLogger=WARN,file,console ## assign an appender named console,which is set to ConsoleAppender ## log4j.appender.console=org.apache.log4j.ConsoleAppender ## assign an appender named file,which is set to RollingFileAppender ## log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=log.txt Layout 组件 Layout 组件用来决定日志的输出格式,它有以下几种类型: z org.apache.log4j.HTMLLayout(以 HTML 表格形式布局) z org.apache.log4j.PatternLayout(可以灵活地指定布局模式) z org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字 符串) z org.apache.log4j.TTCCLayout(包含日志产生的时间、线程和类 别信息) SimpleLayout 仅输出日志信息级别和信息字符串,例如,要为名 为 console 的 Appender 配置 SimpleLayout 布局,可以采用如下的配 置代码: Log4j.appender.console.layout=org.apache.log4j.SimpleLayout Log4j 学习入门--ysWang 采用 SimpleLayout 布局,从控制台看到的输出日志的形式如下: WARN-This is a log message from the helloLogger PatternLayout 可以让开发者依照 ConversionPattern 去定义输出 格式。ConversionPattern 有点像 C 语言的 print 打印函数,开发者可 以通过一些预定义的符号来指定日志的内容和格式,这些符号的说明 参见下表: 符 号 描 述 % 自程序开始后消耗的毫秒数 %t 表示日志记录请求生成的线程 %p 表示日志语句的优先级别 %r 与日志请求相关的类别名称 %c 日志信息所在的类名 %m%n 表示日志信息的内容 例如,要为名为 file 的 Appender 配置 PatternLayout 布局,可以采用 如下配置代码: log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%t %p - %m %n 采用以上 PatternLayout 布局,从日志文件中看到的输出日志的形式 如下: THREAD-1 WARN – This is a log message from the helloLogger 以上日志内容中,“%t”对应“THREAD-1”,“%p”对应“WARN”, “%m%n”对应后面具体的日志信息。 Log4j 学习入门--ysWang Logger 组件的继承性 Log4j 提供了一个 root Logger,它 是 所 有 Logger 组件的祖先,以 下是配置 root Logger 的代码: Log4j.rootLogger=INFO, console 用户可以在配置文件中方便地配置存在继承关系的Logger组件, 凡是在符号“.”后面的 Logger 组件都会成为在符号“.”前面的 Logger 组件的子类。例如: log4j.apache.helloLogger=WARN log4j.apache.helloLogger.childLogger=,file 对于以上配置代码,chileLogger 就是 helloLogger 的子类 Logger 组件。 Logger 组件的继承关系有以下特点: z 如果子类 Logger 组件没有定义日志级别,则将继承父类的日 志级别。 z 如果子类 Logger 组件定义了日志级别,就不会继承父类的日 志级别。 z 默然情况下,子类 Logger 组件会继承父类所有的 Appender, 把它们加入到自己的 Appender 清单中。 z 如果把子类 Logger 组件的 additivity 标志设为 false,那么它就 不会继承父类的 Appender,additivity 标志的默认值为 true。 以上配置的 rootLogger、helloLogger 和 childLogger 之间的继承关系 如下图所示: Log4j 学习入门--ysWang Logger 组件的继承关系 尽管 helloLogger 没有配置 Appender,它继承了 rootLogger 的 console Appender。childLogger 继承了 helloLogger 的日志级别 WARN,此外 它还继承了 helloLogger 从 rootLogger 继承而来的 console Appender。 这 3 个 Logger 组件实际的日志级别和 Appender 清单参见下表: Logger 组件 日志级别 Appender 清单 rootLogger INFO console HelloLogger WARN Console(继承) childLogger WARN(继承) file, console(继承)           root Logger 日志级别=INFO Appender 清单=console Parent 日志级别=null Appender 清单=null childLogger Parent 日志级别=WARN  Appender 清单=null helloLogger Log4j 学习入门--ysWang Log4j 的使用方法 使用 Log4j 包含以下过程: z 获取日志记录器 z 读取配置文件,配置 Log4j 环境 z 输出日志信息 1. 获取日志记录器 使用 Log4j,第一步就是获取日志记录器,这个记录器负责控制 日志信息的输出。如果要获得 rootLogger,可以调用 Logger 类的 静态方法 getRootLogger(): Logger rootLogger=Logger.getRootLogger (); 如果要获取用户自定义的 Logger,可以调用 Logger 的静态方法 getLogger(String name): Logger helloLogger=Logger.getLogger (“log4j.logger.helloLogger”); 2. 读取配置文件,配置 Log4j 环境 当获得了日志记录器之后,第二步就是读取配置文件,配置 Log4j 环境,有 3 中方法: z BasicConfigurator.configure():自动快速地使用默认 Log4j 环境 z PropertyConfigurator.configure(String configFilename):读取使 用 Java 属性格式的配置文件并配置 Log4j 环境 z DOMConfigurator.configure(String filename):读取 XML 形式的配 置文件并配置 Log4j 环境 Log4j 学习入门--ysWang 3. 插入日志信息 在以上两个必要步骤执行完成后,就可以在程序代码中需要生成 日志的地方,调用 Logger 的各种输出日志方法来输出不同级别 的日志,例如: helloLogger.warn(“This is a log message from”+helloLogger.getName()); 在 Web 应用中使用 Log4j 如果在 Web 应用中使用 Log4j,则可以创建一个 Servlet,在它的 初始化方法中读取 Log4j 的配置文件并且配置 Log4j 环境,这个 Servlet 在 Web 应用启动的时候就被加载和初始化了,然后就可以在 其他的 Web 组件中获取 Logger 对象并输出日志。 1. 创建用于配置 Log4j 环境的 Servlet 应将配置 Log4j 环境的代码放在 Servlet 的 init()方法中,这样可 以保证当 Servlet 被加载并初始化后,Log4j 的环境就已经配置好了, 下面是该 Servlet 的部分代码: Log4j 学习入门--ysWang Log4jServlet.java 源程序代码 Log4jServlet通过getInitParameter(“propfile”)方法从web.xml文件 中读取初始化参数 propfile,它代表了 Log4j 配置文件的名字。 Log4jServlet 在 web.xml 文件中的配置代码如下: web.xml Log4j 学习入门--ysWang 2. 创建 Log4j 环境的 Java 属性配置文件 Log4j.properties 3. 在 JSP 页面中输出日志信息 例如在 log4j.jsp 页面中输出日志信息,首先要将 org.apache.log4j.Logger 类导入: <%@ page import=” org.apache.log4j.Logger” %> 然后就可以在<% ……… %>代码块中获取 Logger 对象并输出日志 信息,例如如下的 log4j.jsp: Log4j 学习入门--ysWang 4. 启动 Tomcat 服务器,在浏览器地址栏中输入: http://localhost:8080/log4jTest/log4j.jsp 会在 Tomcat 的控制台下看到如下的日志信息: WARN-This is a log message from helloLogger ERROR- This is a log message from helloLogger FATAL- This is a log message from helloLogger 在 log4jTest/WEB-INF/下看到一个 log.txt 文件,内容如下: http8080-Processor25 WARN-This is a log message from helloLogger http8080-Processor25 ERROR-This is a log message from helloLogger http8080-Processor25 FATAL-This is a log message from helloLogger Log4j 日志学习到此告一段落

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档

相关文档