异常处理——把异常记录下来,log4j的使用

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6399191.html

在我们的项目运行过程中,偶尔会有预料不到的异常发生。如果能在发生异常时把异常的详细情况,比如什么时候在哪一行代码发生了什么异常,严重级别是多少之类的信息记录下来,那么我们就可以在维护时根据这个记录异常的文件针对性地去修复这些异常了。log4j为我们解决了这个问题。

log4j是apache提供给我们的一个处理异常的插件,利用它,我们可以在某些可能出现运行错误的地方用代码做好处理异常的准备。比如:把异常信息在控制台打印出来并把异常以某种易解读的格式保存在一个运行日志文件里。下面,我们来看一下log4j的具体用法。

一:下载log4j插件的jar包

下载地址:http://logging.apache.org/log4j/1.2/download.html

解压后,得到log4j和commons-logging两个jar包,并把上面两个jar包添加到项目里。

二:定制配置信息。

log4j是通过logger对象来处理异常信息的,而关于logger对象的一系列定义却是通过配置文件来实现的。

我们在src目录下新建一个properties文件,如:log4j.properties

然后,我们在该配置文件里进行logger对象的定义。主要有两部分:

1:配置根logger对象

log4j.rootLogger = 【级别】,appender1,appender2,appender3......

级别主要有4个,分别为:ERROR>WARN>INFO>DEBUG。这里的级别决定了程序运行时出现的错误会不会被这里定义的appender处理,只有当出现的错误等级大于等于appender的级别时才会被打印以及写入日志文件。

rootLogger可以配置多个appender,每个appender负责把异常记录作不同处理,比如:appender1把异常记录打印到控制台,appender2把记录写入日志文件...

2:对每个appender对象进行进一步的配置

log4j.appender.appenderName = 具体是哪种appender
//配置appender的具体信息,比如:异常输出到哪个文件、异常信息的保存格式...
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.option = valueN

Log4j提供的appender有以下几种:

org.apache.log4j.ConsoleAppender(输出到控制台),

org.apache.log4j.FileAppender(输出到文件),

org.apache.log4j.DailyRollingFileAppender(输出到每天产生的一个日志文件),

org.apache.log4j.RollingFileAppender(输出到文件大小到达指定尺寸的时候产生一个新的文件的日志文件),

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

每个appender主要需要配置的option有好很多,比如:layout、file、MaxFileSize、Append等,具体那些选项要配置因appender对象的种类而定。

比如,DailyRollingFileAppender需要配置DatePattern项来指定生成日志文件的频率:

log4j提供了几种异常信息的格式,主要有:

org.apache.log4j.HTMLLayout(以HTML表格形式布局)

org.apache.log4j.PatternLayout(可以灵活地指定布局模式)

org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)

org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

其中,常用的是PatternLayout,我们可以灵活地指定异常信息的打印、保存格式。打印参数如下:

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

例如:log4j.appender.appender1.layout.PatternLayout=d%-m%n%  ,则异常打印的格式为  时间-异常信息文字+换行

三:在项目中通过logger对象处理异常1:创建Logger对象
Logger logger=Logger.getLogger(getClass().getName());

2:在可能出现异常的地方通过以下方法打印、输出日志记录到文件

logger.debug ("message")/ logger.debug ("message",exception)
logger.info ("message")/ logger.info ("message",exception)logger.warn ("message")/ logger.warn ("message",exception)logger.error ("message")/ logger.error ("message",exception)

各个appender会根据自身的级别与上面语句插入的记录的级别比较,小于等于时就会处理该记录,输出到控制台或到日志文件。

四:查看日志

在项目运行的web服务器的bin目录下找到配置appender时  log4j.appender.File=fileName  项的fileName文件,即为项目运行时的被写入的异常记录。

				
时间: 2024-10-27 06:38:23

异常处理——把异常记录下来,log4j的使用的相关文章

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

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

adapter结构异常记录

adapter结构异常记录,记录在这个类里,记录数据日志,在148行: com.creditharmony.adapter.core.service.GeneralHttpService package com.creditharmony.adapter.core.service; import java.util.Properties; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; i

Asp.NetCore依赖注入和管道方式的异常处理及日志记录

原文:Asp.NetCore依赖注入和管道方式的异常处理及日志记录 前言 ????在业务系统,异常处理是所有开发人员必须面对的问题,在一定程度上,异常处理的能力反映出开发者对业务的驾驭水平:本章将着重介绍如何在 WebApi 程序中对异常进行捕获,然后利用 Nlog 组件进行记录:同时,还将介绍两种不同的 异常捕获方式:管道捕获/服务过滤:通过本练习,将学习到如何捕获异常.处理异常跳转.记录异常信息. 1. 搭建框架 ????首先,创建一个 WebApi 项目,选择 Asp.Net Core W

spring异常记录-----java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils

今天在练习怎样SSH中进行单元測试的时候出现下列异常: SEVERE: Exception starting filter Struts2 java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:211

第10章-异常处理 --- Checked异常和Runtime异常体系

第10章-异常处理 --- Checked异常和Runtime异常体系 Java的异常被分为两大类:Checked异常和Runtime异常(运行时异常).所有的RuntimeException类及其子类的实例被称为Runtime异常;不是RuntimeException类及其子类的异常实例则被称为Checked异常. 对于Checked异常的处理方法有如下两种: (1)当前方法明确知道如何处理该异常,程序应该用try...catch块来捕获该异常,然后在对应的catch块中修复该异常. (2)当

Android异常记录--Unable to resolve superclass

当引用到*.jar文件时,报错“Unable to resolve superclass ...” " Just started to get this issue after upgrading to ADT 17. Discovered that external .jar files need to be in a 'libs' (with an s) folder otherwise their classes are not included in the .dex file that

sping异常记录----Could not execute JDBC batch update; nested exception is org.hibernate.excepti

今天在练习如何SSH中进行单元测试的时候出现下列异常: org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; nested exception is org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update at org.springframe

异常记录(写txt日志文件)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace WebBuild_CRM.Common { public class ExceptionRecord { public static void RecordException(Exception ex) { FileStream fileStream = null; Str

python的异常处理及异常类定义

python的异常处理语法和大多数语言相似: try: try块的语句... except exceptiontype1 as var:#使用as语句获得本次捕获到的异常的实例var except块语句... except exceptiontype2 as var: except块语句... except: except块语句... else: else块语句... finally: finally块语句... 执行的流程分两类: 1.try->若有异常发生->except->fina