`
Everyday都不同
  • 浏览: 714852 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

关于log4j错误日志的保存

阅读更多

因为最近着手了项目里面日志的规范化工作,之前开发的时候都是System.out.println("xxxxx")这种打印语句一了百了,十分常见和简便~~

但是一旦项目进行到了后期,开发工作基本完成,日志的规范化就该提上日程啦。日志存在的意义就是记录用户在使用的过程中的操作和问题,尤其是问题,因为错误日志是更有价值的。打印到控制台的

System.out.println("xxxxx")语句只是暂时的调试功能,我们需要把错误保存起来,以便出现了问题的时候,可以去历史的错误日志中查看问题,定位问题的节点~~~

 

对于异常(错误),我们常常在try{...}catch(Exception e) {...}结构中catch异常。最常见的是e.printStackTrace()将错误的堆栈信息打印出来,但是问题是,打印的堆栈信息是在控制台的,

起不到日志的保存作用,想要保存到日志中,不能只e.printStackTrace(),所以log.error就很有必要啦。

 

在catch模块中使用log.error也需要注意一些重要的问题,下面使用一个小例子来说明下。

 

常见写法一:log.error(Exception e);

try{
	String str = null;
	System.out.println(str.length());
} catch(Exception e) {
	log.error(e);
	e.printStackTrace();
}

 打印结果:

2016-05-06 18:10:15,414 com.bcs.amp.action.alarm.Test ERROR java.lang.NullPointerException

java.lang.NullPointerException

at com.bcs.amp.action.alarm.Test.main(Test.java:16)

 

结果说明:log.error只打印了异常类型,异常堆栈信息由e.printStackTrace();产生而同时打印。

(即使你把log.error(e);改成log.error("错误:" + e);——log.error接收到的依然是只一个参数。

错误日志的打印变成:

2016-05-06 18:11:53,661 com.bcs.amp.action.alarm.Test ERROR 错误:java.lang.NullPointerException,还是依然打印异常类型而已。)

 

常见写法二:log.error("异常详细信息", Exception e);

try{
	String str = null;
	System.out.println(str.length());
} catch(Exception e) {
	log.error("错误:", e);
	e.printStackTrace();
}

 打印结果:

2016-05-06 18:14:38,151 com.bcs.amp.action.alarm.Test ERROR 错误:

java.lang.NullPointerException

at com.bcs.amp.action.alarm.Test.main(Test.java:16)

java.lang.NullPointerException

at com.bcs.amp.action.alarm.Test.main(Test.java:16)

 

结果说明:log.error此时和e.printStackTrace()的作用一样,也打印出了堆栈信息。区别于写法一,它有2个参数传入log.error函数,并且第二个参数是Exception对象。

显而易见,写法二的错误日志打印更具实际意义,因为我们排错的化,肯定是需要异常的堆栈信息的,只有一个异常类型名称实际意义并不大;

 

说完了2种常见的错误日志打印,接下来我要来看下方法的调用对日志保存的影响,先看:

public static void main(String[] args) {
		try{
			String str = null;
			test(str);
		} catch(Exception e) {
			log.error("错误:", e);
			e.printStackTrace();
		}
		
	}
	
	public static void test(String str) {
		try{
			System.out.println(str.length());
		} catch(Exception e) {
			log.error("test方法调用异常:" , e);
			e.printStackTrace();
		}
	}

 打印结果:

2016-05-06 18:20:43,654 com.bcs.amp.action.alarm.Test ERROR test方法调用异常:

java.lang.NullPointerException

at com.bcs.amp.action.alarm.Test.test(Test.java:26)

at com.bcs.amp.action.alarm.Test.main(Test.java:16)

java.lang.NullPointerException

at com.bcs.amp.action.alarm.Test.test(Test.java:26)

at com.bcs.amp.action.alarm.Test.main(Test.java:16)

 

结果表明:在主方法中调用其他方法,如果其他方法已经有try{...} catch(Exception e) {...}并且在catch中保存了错误日志,则主方法对于错误日志的保存操作将不再进行,这是需要注意的,

因为在实际的错误日志保存过程中,很有可能因此导致你在主方法的catch模块进行的log.error()操作不起作用。。不明白这层机制会令人很郁闷。。。

 

再看:

public static void main(String[] args) {
		try{
			String str = null;
			test(str);
		} catch(Exception e) {
			log.error("错误:", e);
			e.printStackTrace();
		}
		
	}
	
	public static void test(String str) {
		try{
			System.out.println(str.length());
		} catch(Exception e) {
			
		}
	}

 此时被调用的方法test()在catch里啥都不做,打印结果竟然会是一片空白!这说明:在主方法中调用test()方法,只要test()方法有try{...} catch(Exception e) {...}结构,test()方法的catch模块啥也不处理,

主方法的catch模块的错误日志处理或堆栈信息打印操作也不会进行~~

分享到:
评论

相关推荐

    log4cplus 源码(C++编写的开源的日志系统)

    log4cplus是C++编写的开源的日志系统,前身是java编写的log4j系统.受Apache Software License保护。作者是Tad E. Smith。log4cplus具有线程安全、灵活、以及多粒度控制的特点,通过将信息划分优先级使其可以面向程序...

    log4matlab:考虑到 Apache 的 log4cxx 和 log4j 编写的简单记录器-matlab开发

    日志输出可以保存在永久性介质中,以便以后进行研究。 [注] 以上文字摘自Apache log4cxx网页,略有修改 Log4matlab 旨在可靠、快速和可扩展。 由于日志记录很少是应用程序的主要焦点,因此 API 力求易于理解和使用...

    SpringBoot Logback日志记录到数据库的实现方法

    主要介绍了SpringBoot Logback日志记录到数据库的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    s2mBlog 免费博客平台 v3.2.0

    项目全程采用LOG4J2作为日志框架,包括控制台输出、记录到文件、严重错误发送邮件提醒、将日志记录至数据库;图片、视频、附件上传保存在云存储,提升浏览速度、安全性能、稳定性;完善的管理员权限体系,将权限分配...

    StudentInfoManage2.rar

    在Java编程中,信息管理通常涉及数据的存储、处理和系统的组织。以下是一些Java中信息管理的常见技术和方法: 1. **数据结构和集合类...6. **日志记录**:Java中流行的日志框架(如Log4j、Logback)可以帮助记录程序运

    Zookeeper修改运行日志zookeeper.out输出路径

    Zookeeper中运行日志 zookeeper.out 文件的输出路径默认为启动脚本的当前路径,导致Zookeeper集群启动失败时总是不记得输出日志在哪儿,不便于查找错误原因,因此很有必要设置固定路径来保存运行日志 在本次实验之前...

    LEMA - Log/Event Monitor and Analyser:通过警报和强大的RCP-UI集中记录到数据库-开源

    它支持多个应用程序的异步日志记录(log4j-appender)。 处理日志并将其保存到数据库。 RCP-UI支持带有高级过滤器的实时视图,历史视图。 您可以将其用于错误监视/通知; 为了做到这一点,服务器执行基于规则的标签...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 ...

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    避免重复打印日志,浪费磁盘空间,务必在log4j.xml中设置additivity=false。 D .错误日志和业务日志尽量分开存放。 多选 16.关于代码注释,下列哪些说法符合《阿里巴巴Java开发手册》:ABD A .特殊注释标记,请...

    algorithm_app

    1)使用控制台日志:当您尝试保存新算法时,控制台中会显示错误。 / fix是必需的。 2)所有字段都必须是脏的以保存它们。 3)算法字段是:左上->用户将看到的内容,右上:TDD,左下:测试TDD的可测试解决方案,右下...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 ...

    微软活动目录管理管理简明手册

    R5 I* ~: k6 g1 B$ @4 Z- j' B ( y: ] o$ r9 C( \/ x5 b @: a站点(Site)是由一个或多个IP子网中的一组计算机,确保目录信息的有效交换,站点中的计算机需要很好地连接,尤其是子网内的计算机。站点和域名称空间...

    Linux高级bash编程

    J. History Commands K. A Sample .bashrc File L. Converting DOS Batch Files to Shell Scripts M. Exercises M.1. Analyzing Scripts M.2. Writing Scripts N. Revision History O. Mirror Sites P. To Do ...

    遗传算法与粒子群算法的实现

    本框架提供了有关粒子群...batch.run()开始执行算法比较过程并输出结果Excel文件到C盘根目录(输出路径可在Testable接口中配置,除了生成Excel文件外,还可以通过修改log4j.properties在制定的位置产生运行结果日志)。

    Advanced Bash-Scripting Guide <>

    J. History Commands K. A Sample .bashrc File L. Converting DOS Batch Files to Shell Scripts M. Exercises M.1. Analyzing Scripts M.2. Writing Scripts N. Revision History O. Mirror Sites P. To Do List Q...

    Toad 使用快速入门

    四.快速入门 1. Schema browser的用法简介 2. SQL Editor的使用介绍 3. Procedure Editor的用法介绍 4. 如何进行PLSQL的debug 5. 如何使用SQLab Xpert优化SQL 6. 如何使用SQL Modeler来编写查询 7. 如何使用...

    LINGO软件的学习

    @sum(warehouses(I): volume(I,J))=demand(J)); !产量约束; @for(warehouses(I): @sum(vendors(J): volume(I,J))(I)); !这里是数据; data: capacity=60 55 51 43 41 52; demand=35 37 22 32 41 32 43 38; ...

Global site tag (gtag.js) - Google Analytics