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

在项目中的应用见: https://github.com/ygj0930/CoupleSpace

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

												

JavaWeb项目异常管理之log4j的使用教程的更多相关文章

  1. 第一个远程javaweb项目测试全过程

    2017-5-20,在这个奇特的日子,我不再满足于在本地测试javaweb,于是在上腾讯云买了第一个云服务器,由于是学生认证,所以一个月只要10块钱,还是要抢的,每天早上9点开抢 打开后,发现其实是一 ...

  2. log4j在javaWeb项目中的使用

    在前边的文章中对log4j的配置文件进行了说明,今天介绍如何在普通的javaWeb项目中使用log4j. 在日常的开发过程中,日志使用的很频繁,我们可以利用日志来跟踪程序的错误,程序运行时的输出参数等 ...

  3. Go语言项目的错误和异常管理 via 达达

    Go语言项目的错误和异常管理 最近连续遇到朋友问我项目里错误和异常管理的事情,之前也多次跟团队强调过错误和异常管理的一些概念,所以趁今天有动力就赶紧写一篇Go语言项目错误和异常管理的经验分享. 首先我 ...

  4. JavaWeb项目中获取对Oracle操作时抛出的异常错误码

    最近在项目中碰到了这么一个需求,一个JavaWeb项目,数据库用的是Oracle.业务上有一个对一张表的操作功能,当时设置了两个字段联合的唯一约束.由于前断没有对重复字段的校验,需要在插入时如果碰到唯 ...

  5. 转:基于Maven管理的JavaWeb项目目录结构参考

    通常在创建JavaWeb项目时多多少少都会遵循一些既定的比较通用的目录结构,下面分享一张基于Maven管理的JavaWeb项目目录结构参考图: 上图仅是参考,不同项目不同团队都有自己的约定和规范. 个 ...

  6. Javaweb项目中出现java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone.异常

    javaweb项目中java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represent ...

  7. 普通的javaweb项目和用maven管理的javaweb project的目录结构的区别

      图一,图二 这种就是单独的建立普通的(也就是没有用maven管理包)javaweb项目的结构目录,这种需要将普通的jar依赖放到lib目录下,之后通过bulid   图一

  8. javaweb项目-医者天下 (Spring+SpringMVC+MyBatis)

    项目下载地址:http://download.csdn.net/detail/qq_33599520/9826683 项目完整结构图: 项目简介: 医者天下项目是一个基于Spring+SpringMV ...

  9. 使用maven搭建ssm框架的javaweb项目

    目前主流的javaweb项目,常会用到ssm(Spring+Spring MVC+Mybatis)框架来搭建项目的主体框架,本篇介绍搭建SSM框架的maven项目的实施流程.记之共享! 一.SSM框架 ...

随机推荐

  1. 趣谈Java变量的可见性问题

    了解过多线程的我们,对synchorized,sleep和valatile都比较了解,但是当这三个名词和“Java变量得可见性”的话题联系在一起不知道大家是否还可以保持大脑清晰??? 最近看到一个关于 ...

  2. 用SparseArray代替HashMap

    SparseArray是android提供的一个工具类,它可以用来替代hashmap进行对象的存储,其内部实现了一个矩阵压缩算法,很适合存储稀疏矩阵的. PS:support包中还提供了兼容的类Spa ...

  3. Prometheus 初体验

    本文环境 Redhat Linux 6.7, Prometheus 2.2.1,node_exporter 1.5.2 介绍 Prometheus 是2012年由 SoundCloud 开源的系统监控 ...

  4. [转]MySQL导入.sql文件及常用命令

    From : http://blog.csdn.net/muziduoxi/article/details/6091202 在MySQL Qurey   Brower中直接导入*.sql脚本,是不能一 ...

  5. 使用idea 在springboot添加本地jar包的方法本地运行有效,一旦需要打jar就会报错,这就需要在

    https://blog.csdn.net/huxiaodong1994/article/details/80702278 1.首先在与src同级的目录下新建一个lib目录,然后将本地jar包放在li ...

  6. 【手机网络游戏 编程】C#异步socketAPI调用 处理数据的流程

    之前客户端在网络条件好的时候,运行没问题.但是有时候手机的网络不稳定,接受数据可能不稳定,导致接受数据错误,一直都不知道,原来是接受数据处理的不够好! 现在更改过后的接受数据的逻辑如下: //接收 p ...

  7. C++ assert 断言使用

    在研究corepattern需要让程序出core, 因此用到的assert, 记录一下. 写严谨代码时,也可以使用assert进行严格的条件判断.   函数原型: #include <asser ...

  8. [2014亚马逊amazon] 在线笔试题 大于非负整数N的第一个回文数 Symmetric Number

    1.题目 如标题,求大于整数N(N>=0)的第一个回文数的字符串表示形式. 这个题目也是当时笔试第一次见到,花了一个小时才做出了.慢慢总结还是挺简单的. 2.分析 分析如下: (1)一位数N(9 ...

  9. go语音之进阶篇爬百度贴吧单线程版本

    一.爬什么? 1.明确目标 : 知道你准备在那个范围或者网站去搜索 2.爬: 将所有的网站的内容全部爬下来 3.取:去掉对我们没用处的数据 4.处理数据:按照我们想要的方式存储或使用 二.百度贴吧小爬 ...

  10. Entity Framework 与 LINQ to SQL

    Entity Framework和LINQ to SQL到底有什么区别?这是一个很常见的问题.下面的表中简要罗列了两种技术的主要区别. LINQ to SQL Entity Framework 复杂度 ...