JavaWeb_15_日志及异常处理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.1.2 log4j简介
log4j是Apache的一个开放源代码项目,log4j框架是用Java语言 编写的标准日志记录框架。作为Jakarta项目的一部分,它在Apache 软件许可证(Apache Software License)下分发,以速度和灵活性 为中心概念:log4j环境是完全可配置的,通过使用Log4j,我们可 以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套
图5-1 添加jar包 选择【Libraries】【Add External JARs】出现如图5-2所示的文件 选择对话框。
图5-2 选择log4j支持包 选择log4j支持包完成添加。
5.2.2 创建log4j配置文件
log4j配置文件必须保存在源代码跟目录中、及src下,并且文件 名是log4j.properties(也可以使用log4j.xml文件配置)。选择 src目录点击右键,选择【New】【File】选项,弹出“新建文 件”对话框,输入文件名“log4j.properties”,点击“完成”按 钮,创建工作结束,如图5-3所示。
图5-3 创建配置文件 src中的log4j.properties配置文件是专门用来配置日志信息的 输出内容、格式等。该配置文件的内容如下: ## 配置到控制台的日志信息输出源 ## log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = %d %m %n ## 配置到文件的日志信息输出源 ## log4j.appender.f = org.apache.log4j.FileAppender log4j.appender.f.File = i:/test.log log4j.appender.f.layout = org.apache.log4j.PatternLayout log4j.appender.f.layout.ConversionPattern =
接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可 以控制每一条日志的输出格式;通过定义每一条日志信息的级别, 我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是, 这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用 的代码。 此外,通过Log4j其他语言接口,您可以在C、C++、.Net、 PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得 多语言分布式系统得到一个统一一致的日志组件模块。而且,通过 使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI甚 至是SNMP应用中。log4j的好处在于: 通过修改配置文件,就可以决定log信息的目的地——控制 台、文件、GUI组件、甚至是套接口服务器、NT的事件记录 器、UNIX Syslog守护进程等。 通过修改配置文件,可以定义每一条日志信息的级别,从而 控制是否输出。在系统开发阶段可以打印详细的log信息以跟 踪系统运行情况,而在系统稳定后可以关闭log输出,从而在能 跟踪系统运行情况的同时,又减少了垃圾代码 (System.out.println(......)等)。 使用log4j,需要整个系统有一个统一的log机制,有利于系 统的规划。
信息。其输出内容如图5-6所示。
图5-6 log4j输出结果 因为在配置文件中设置了输出级别为warn,所以比warn级别低的 info、debug信息没有被输出。又因为没有在配置文件中启动文件输 出源,所示在i盘中不能找到test.log文件和日志信息。如果修改配 置文件的级别和输出源如下: log4j.rootLogger=debug,stdout,f 运行时将看到空台的内容如图5-7所示。
5.2 log4j的使用
log4j是apache提供的开源的第三方框剪,也就是在在j2ee开发 包中并没有对log4j的支持,当我们需要使用log4j时必须添加相应 的jar包。根据前面对于log4j的介绍我们知道它是通过配置文件来 设置输入的内容、格式、目标,所以我们也必须掌握log4j配置文件 的编写。最后还需在代码中添加log4j的调用。由此可知log4j日志 系统的使用步骤有:添加log4j支持、配置log4j配置文件、在java 代码中调用log4j记录日志。
图5-4 修改编码格式 选择图5-4中的ContentTypes中的【Text】【Java Properties File】,修改Default encoding的值为“UTF-8”,即将属性文件的 默认编码格式修改为“UTF-8”字符集。如图5-5所示。
ຫໍສະໝຸດ Baidu
图5-5 修改编码格式 点击【Update】【OK】完成编码格式修改。在log4j.properties文 件中所配置的内容包含如下几点: 1、输出源配置 输出源配置是指将日志信息以指定格式输出到指定的目标,一般 目标分为两种、即控制台和文件。如果输出目标类是时控制台则使 用org.apache.log4j.ConsoleAppder类实现输出管理、目标属性为 System.out(系统标准输出流);如果输出目标是日志文件则使用 org.apache. log4j.FileAppender类实现输出管理、目标属性File 登录日志文件路径和文件名。 当然日志文件输出目标除了控制台、文件外还有HTML页面等形 式。 2、输出源布局配置 输出源都需要使用org.apache.log4j.PatternLayout类实现输出 日志内容格式和布局管理,在配置文件中通过 log4j.appender.f.layout.ConversionPattern配置PatternLayout
log4j.rootLogger=warn,stdout,f 表示将日志信息同时输出在控制台和e:/test.log文件中。 5、注释 在属性文件中(即后缀名为.properties的文件)使用“#”编写 注释。
5.2.3 使用log4j输出日志
当完成支持添加和配置文件添加之后就可以在程序中使用log4j 了。在例5-1中我们通过测试类来实现不同级别的日志信息输出。 例5-1:记录日志信息 package com.sanlian.javaWebAd.ch5; import org.apache.log4j.Logger; public class Test { public static void main(String[] args) { //获得日志记录器,这个记录器将负责控制日志信息 Logger log = Logger.getLogger(Test.class); //调用log对象的相应方法输出不同级别的日志信息 //输出fatal级别的日志信息 log.fatal("----fatal----"); //输出error级别的日志信息 log.error("----error----"); //输出warn级别的日志信息 log.warn("----warn-----"); //输出info级别的日志信息 log.info("----info-----"); //输出debug级别的日志信息 log.info("----debug----"); } } 在上例中,我们使用日志记录器的相应方法输出了每种级别的日志
类的日志信息格式。%d表示在日志信息中出当前系统时间、时间的 格式通过后面的一个日期格式的字符串表达式控制(字符串表达式 的格式和SimpleDateFormat)相同;%l表示在日志信息中输出事件 发生的文字,包括雷鸣、发生的线程、以及代码中的行数。例如: 输出日志信息为: com.sanlian.javaWeb.ch5.Test.main(Test.java:16) 说明日志事件发生在Test类中的main线程中,在代码中的行数为第 16行;%p表示输出日志信息的级别;%m用来输出调用log4j代码中的 指定信息;%n用于输出一个回车换行符。 3、优先级配置 在log4j中的日志信息是有优先级别的,通过log4j.rootLogger 配置。在log4j中的优先级有:off、fatal、error、warn、info、 debug、all或者您定义的级别。log4j建议只使用四个级别,优先级 从高到低分别是error、warn、info、debug。通过在这里定义的级 别,您可以控制到应用程序中相应级别的日志信息的开关。 假如在一个级别为q的Logger中发生一个级别为p的日志请求,如 果p>=q,那么请求将被启用。比如在配置文件定义的输出级别是 info,则应用程序中所有debug级别的日志信息将不被打印出来。因 为debug的优先级别小于info,所以不会输出。 4、启动输出源 在配置文件中配置的输出目标不会都起作用,只是使用到的输出 源才会起效,这需要在配置优先级的log4j.rootLogger后添加相应 的输出源,如配置文件中的: log4j.rootLogger=warn,stdout 表示在设置输出级别为warn的同时启动stdout输出源,及日志信 息将会输出到控制台,但是不会输出到e盘的test.log文件中。当然 在配置文件中也可以启动多个输出源,如:
5.1 日志概述 5.1.1 日志简介
软件的运行过程离不开日志。日志的主要作用是记录一些重要的 操作信息,比如应用权限的修改、程序运行的系统异常、导致致命 错误的异常,日志文件记录的信息一般包括错误类型、时间、错误 点。日志文件能够帮助用户提前发现和避免灾难,并且找到系统发 生的根本原因。位程序的升级、维护提供有力保障。 比如当你开发完一个项目、并交互给客户使用后发现在客户的环 境中不能运行。由于是以window服务的防是启动的web服务器,所有 不能使用控制台的方式查看异常信息,这时将给维护人员或实施人 员将无从下手。但如果将系统的异常信息记录到日志文件中,维护 人员或实施人员就可以根据日志文件中记录的运行信息解决问题。 也就是说在我们开发的系统中需要将运行的一些信息、状态、过 程使用文件流的方式将其写在硬盘的某一个文件或多个文件中,这 就是我们所说的日志记录。
第5章 日志及异常处理
我们学习过Java异常处理和JSP的相关课程。本章,我们将对Web 应用程序中得异常集中处理。对于情况严重的系统异常我们需要将 其写入日志文件,对于用于操作不规范的异常我们应该给出客户友 好的提示信息。在本章中我们将讲解如何使用lor4j框架来实现日志 文件的记录,以及如何设计web应用程序的结构来实现相应异常的处 理。
5.2.1 添加log4j
首先需要获取log4j的jar包,可以在apache的官方网站中下载、 其下载页面路径是http://logging.apache.org/,该页面中包含 log4j的所有版本下载,如:1.2、1.3、2.0。下载后将其保存在指 定目录中。 然后就可以将log4j的jar包添加到web应用程序中。选择web应用 程序项目点击右键【Properties】【Java Build Path】出现如图51所示的界面。
%d{yyyy-MM-dd HH:mm:ss} %l %m %n ## 设置日志信息的输出级别和启动的输出源 ## log4j.rootLogger=warn,stdout MyEclipse中属性文件默认的编码格式为ISO-8859-1,该编码不支持 中文。当属性文件中包含中文内容时将无法保存,此时可以修改文 件的编码格式,选择菜单【Window】【Preferences】【Genernal】 【Content Types】出现如图5-4所示的文档格式设置界面。