因为最近着手了项目里面日志的规范化工作,之前开发的时候都是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模块的错误日志处理或堆栈信息打印操作也不会进行~~
相关推荐
Log4j是一款广泛应用于Java平台的日志记录框架,它的主要任务是帮助开发者记录应用程序运行过程中的各种信息,包括错误、警告、调试信息等。在Android平台上,虽然原生的`Log`类已经提供了基本的日志功能,但Log4j...
总结,Log4j2通过XML配置文件实现了与MySQL数据库的集成,允许开发者将日志信息存储在数据库中,便于长期保存和分析。理解Log4j2的配置和使用是每个Java开发者必备的技能,这对于日后的故障排查和系统维护至关重要。...
《深入理解Log4j:构建高效日志管理体系》 在软件开发中,日志系统扮演着至关重要的角色,它能够帮助开发者追踪程序运行状态、定位错误、排查问题以及进行性能分析。Log4j,作为Java领域中最流行的日志框架之一,因...
总结起来,通过使用Log4j与MySQL的集成,我们可以实现对日志的详细控制,并将这些日志安全地保存在数据库中,便于后期分析和排查问题。SLF4J提供了一层抽象,使得我们可以轻松地切换不同的日志实现,而自定义的...
### 基于Log4J的日志输出组件设计的关键知识点 #### 1. 引言:日志管理的重要性 在软件开发与系统运行过程中,日志管理占据着至关重要的地位。据统计,在一个软件系统中,日志输出相关的代码量约占总代码量的4%...
本文将深入探讨如何在Android环境中利用Log4j将日志记录到缓存或者SD卡,以便于后期分析和错误查询。 首先,我们需要理解Log4j的基本概念。Log4j主要由三个核心组件组成:Logger(日志器)、Appender(输出端)和...
例如,你可以设置一个Console Appender将日志输出到控制台,再添加一个File Appender将日志保存到文件。 **日志级别** Log4j支持多个日志级别,包括TRACE、DEBUG、INFO、WARN、ERROR、FATAL和OFF,这些级别按照严重...
**日志框架Log4j详解及配置实例** Log4j是Apache组织开发的一款广泛应用的日志记录框架,尤其在Java应用程序中被广泛采用。它提供了一种灵活、强大的方式来记录程序运行过程中的各种信息,包括错误、警告、调试信息...
Log4j是Apache软件基金会开发的一个Java日志记录框架,广泛应用于各种Java应用程序中,包括企业级应用、服务器和Web应用程序。它为开发者提供了一种灵活且强大的方式来记录应用程序运行时的事件,如错误、警告、调试...
通常,Log4j的配置信息会保存在`log4j.properties`或`log4j.xml`文件中。加载配置文件是初始化Log4j的第一步,这可以通过`PropertyConfigurator.configure()`或`DOMConfigurator.configure()`方法完成。 5. **实例...
通过这个配置,Log4j将会在每条日志记录时执行指定的SQL插入语句,将日志信息保存到`LOGGING`表中。确保数据库连接参数(如URL、用户名和密码)正确无误,以便Log4j能成功连接并写入数据。 总结来说,Log4j写入...
1. **记录程序运行日志信息**:Log4j能够记录程序运行时的各种信息,例如错误信息、警告信息等,这对于后续的故障排查和问题定位非常重要。 2. **显示调试信息**:在软件开发过程中,程序员经常需要查看某些变量的值...
在提供的`Log4j.ppt`和`Log4j详细解.txt`文件中,你将找到更深入的Log4j使用示例和详细解释,这些资料将帮助你更好地理解和运用Log4j框架,提升你的日志处理能力。通过实践和学习,你可以更加熟练地利用Log4j来监控...
log4j 是一个广泛使用的 Java 日志框架,它提供了一种高效、灵活的方式来记录应用程序中的事件。这篇介绍旨在帮助初学者理解 log4j 的核心概念和使用方法。 **1. 简介** 日志记录在软件开发中扮演着重要角色,因为...
通过以上步骤,我们不仅实现了在SSH框架中集成Log4j的目标,还充分利用了Log4j提供的各种特性,如动态配置、灵活的日志文件管理等。这对于提高开发效率、简化运维工作具有重要意义。希望本文能帮助读者更好地理解和...
根据提供的标题、描述、标签及部分内容,我们可以详细探讨关于log4j配置文件的相关知识点,特别是如何通过各种Appender实现日志记录的不同需求。 ### 一、log4j配置文件概述 log4j是一款非常强大的日志框架,它...
在Android开发中,日志记录是一项非常重要的任务,它帮助开发者追踪应用的运行...以上就是关于“Android log4j使用Demo”的主要知识点,通过这个示例,开发者可以了解如何在Android环境中有效地利用log4j进行日志管理。
在`log4j.properties`中,可以配置日志文件大小限制和日期滚动,以便自动创建新的日志文件并保存旧的,防止单个日志文件过大。 7. **实际应用**: 在Web项目中,Log4j常用于记录HTTP请求、SQL查询、异常堆栈信息...
"Log4cpp(添加按日期生成日志类)" 提示我们这是一个关于Log4cpp的项目,而且已经进行了扩展,增加了按照日期生成日志文件的功能。Log4cpp是C++的一个日志记录库,它借鉴了Java中的log4j框架,提供了灵活的日志管理...
本篇文章将深入探讨这两个关键组件:日志配置文件`log4j.xml`和MySQL数据库驱动文件`mysql-connector-java-5.1.39-bin.jar`。 首先,我们来了解`log4j.xml`。Log4j是Apache组织提供的一款开源的日志记录框架,广泛...