JavaWeb_15_日志及异常处理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

-0-第5章日志及异常处理-1-我们学习过Java异常处理和JSP的相关课程。本章,我们将对Web应用程序中得异常集中处理。对于情况严重的系统异常我们需要将其写入日志文件,对于用于操作不规范的异常我们应该给出客户友好的提示信息。在本章中我们将讲解如何使用lor4j框架来实现日志文件的记录,以及如何设计web应用程序的结构来实现相应异常的处理。5.1日志概述5.1.1日志简介软件的运行过程离不开日志。日志的主要作用是记录一些重要的操作信息,比如应用权限的修改、程序运行的系统异常、导致致命错误的异常,日志文件记录的信息一般包括错误类型、时间、错误点。日志文件能够帮助用户提前发现和避免灾难,并且找到系统发生的根本原因。位程序的升级、维护提供有力保障。比如当你开发完一个项目、并交互给客户使用后发现在客户的环境中不能运行。由于是以window服务的防是启动的web服务器,所有不能使用控制台的方式查看异常信息,这时将给维护人员或实施人员将无从下手。但如果将系统的异常信息记录到日志文件中,维护人员或实施人员就可以根据日志文件中记录的运行信息解决问题。也就是说在我们开发的系统中需要将运行的一些信息、状态、过程使用文件流的方式将其写在硬盘的某一个文件或多个文件中,这就是我们所说的日志记录。5.1.2log4j简介log4j是Apache的一个开放源代码项目,log4j框架是用Java语言编写的标准日志记录框架。作为Jakarta项目的一部分,它在Apache软件许可证(ApacheSoftwareLicense)下分发,以速度和灵活性为中心概念:log4j环境是完全可配置的,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIXSyslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。此外,通过Log4j其他语言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。而且,通过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI甚至是SNMP应用中。log4j的好处在于:-2-通过修改配置文件,就可以决定log信息的目的地——控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIXSyslog守护进程等。通过修改配置文件,可以定义每一条日志信息的级别,从而控制是否输出。在系统开发阶段可以打印详细的log信息以跟踪系统运行情况,而在系统稳定后可以关闭log输出,从而在能跟踪系统运行情况的同时,又减少了垃圾代码(System.out.println(......)等)。使用log4j,需要整个系统有一个统一的log机制,有利于系统的规划。5.2log4j的使用log4j是apache提供的开源的第三方框剪,也就是在在j2ee开发包中并没有对log4j的支持,当我们需要使用log4j时必须添加相应的jar包。根据前面对于log4j的介绍我们知道它是通过配置文件来设置输入的内容、格式、目标,所以我们也必须掌握log4j配置文件的编写。最后还需在代码中添加log4j的调用。由此可知log4j日志系统的使用步骤有:添加log4j支持、配置log4j配置文件、在java代码中调用log4j记录日志。5.2.1添加log4j首先需要获取log4j的jar包,可以在apache的官方网站中下载、其下载页面路径是,该页面中包含log4j的所有版本下载,如:1.2、1.3、2.0。下载后将其保存在指定目录中。然后就可以将log4j的jar包添加到web应用程序中。选择web应用程序项目点击右键【Properties】【JavaBuildPath】出现如图5-1所示的界面。图5-1添加jar包-3-选择【Libraries】【AddExternalJARs】出现如图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创建配置文件-4-src中的log4j.properties配置文件是专门用来配置日志信息的输出内容、格式等。该配置文件的内容如下:##配置到控制台的日志信息输出源##log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d%m%n##配置到文件的日志信息输出源##log4j.appender.f=org.apache.log4j.FileAppenderlog4j.appender.f.File=i:/test.loglog4j.appender.f.layout=org.apache.log4j.PatternLayoutlog4j.appender.f.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss}%l%m%n##设置日志信息的输出级别和启动的输出源##log4j.rootLogger=warn,stdoutMyEclipse中属性文件默认的编码格式为ISO-8859-1,该编码不支持中文。当属性文件中包含中文内容时将无法保存,此时可以修改文件的编码格式,选择菜单【Window】【Preferences】【Genernal】【ContentTypes】出现如图5-4所示的文档格式设置界面。图5-4修改编码格式选择图5-4中的ContentTypes中的【Text】【JavaPropertiesFile】,修改Defaultencoding-5-的值为“UTF-8”,即将属性文件的默认编码格式修改为“UTF-8”字符集。如图5-5所示。图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类的日志信息格式。%d表示在日志信息中出当前系统时间、时间的格式通过后面的一个日期格式的字符串表达式控制(字符串表达式的格式和SimpleDateFormat)相同;%l表示在日志信息中输出事件发生的文字,包括雷鸣、发生的线程、以及代码中的行数。例如:输出日志信息为:com.sanlian.javaWeb.ch5.Test.main(Test.java:16)-6-说明日志事件发生在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文件中。当然在配置文件中也可以启动多个输出源,如:log4j.rootLogger=warn,stdout,f表示将日志信息同时输出在控制台和e:/test.log文件中。5、注释在属性文件中(即后缀名为.properties的文件)使用“#”编写注释。5.2.3使用log4j输出日志当完成支持添加和配置文件添加之后就可以在程序中使用log4j了。在例5-1中我们通过测试类来实现不同级别的日志信息输出。例5-1:记录日志信息packagecom.sanlian.javaWebAd.ch5;importorg.apache.log4j.Logger;publicclassTest{publicstaticvoidmain(String[]args){-7-//获得日志记录器,这个记录器将负责控制日志信息Loggerlog=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----);}}在上例中,我们使用日志记录器的相应方法输出了每种级别的日志信息。其输出内容如图5-6所示。图5-6log4j输出结果因为在配置文件中设置了输出级别为warn,所以比warn级别低的info、debug信息没有被输出。又因为没有在配置文件中启动文件输出源,所示在i盘中不能找到test.log文件和日志信息。如果修改配置文件的级别和输出源如下:log4j.rootLogger=debug,stdout,f运行时将看到空台的内容如图5-7所示。图5-7输出所有级别的日志信息-8-在i盘中生成的test.log内容如图5-8所示。图5-8日志文件对比5-7和5-8我们可以看出在日志文件中记录的每个日志信息所发生的位置,这是因为我们在文件输出源的布局方式中使用%l的缘故。5.3web应用程序架构设计在web应用程序中有很多的异常,如果不进行相应的处理在页面将不能得到友好的提示信息,并且也不

1 / 17
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功