`
fly_hyp
  • 浏览: 305734 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Java中Exception log的使用

阅读更多

 


Java Exception信息的日志输出


http://fly-hyp.iteye.com

这篇文档是用word写的,web格式不完整如需要请看附件



1.概要

这篇文章讲的是Java中异常日志的主题,主要是讲他们在所有软件过程中如何帮助调试错误的。如果您是初级的Java水平,这篇文章会指导您如何使用日志(Log4j)和异常。如果您是资深的Java工程师,和我一样,一定也遇到整个项目团队关于异常日志滥用的行为。您也希望给初级工程师写一个指导,帮助大家用好异常日志,或想使项目中规范使用,这篇文章也是为探讨这些的。

Java中日志(Log )和异常(Exception)是两项基本的功能。来到公司我也看了不少的现有代码,发现大家的使用方式是不太一样的,也存在一些明显的误用。


2.基础


使用例子

因为大家的开发习惯等不一样,所以异常日志的使用方式也会不一样,先和我一起看看典型例子吧。


例如:






3.异常日志在软件开发流程中的位置

 

异常是Java提供的异常的处理流程方式,但发生异常时Exception类的内部信息就是为了显示异常发生的来龙去脉了。所以Exception的各种属性信息一定要好好理解清楚。

Log就是记录日志、使用日志。现在我做的各种项目中用的最多的就是Log4j。日志有很多种用途,记录程序运行的错误肯定是最重要的。

下面我讲一下Log记录错误的原理。

Log中的记录错误可以分为:

非程序原因的错误(网络错误、用户输出入错)

程序原因的错误

已知的

可做简化处理

未知的

应该记录完备,不要丢失有用的信息。



4.Exception对象使用详解

Cause属性:用于存放内部异常对象信息

Throwable

getCause() 

Throwable

initCause(Throwable cause) 


StackTrace属性:用于存放异常对象建立时的运行堆栈信息(可以被修改)

StackTraceElement[]

getStackTrace() 

void setStackTrace(StackTraceElement[] stackTrace) 


强调一点,如果是因为捕获了异常而要抛出新的异常千万不要丢失内部异常信息(因为内部异常对象才是Root Cause)。有两种方式保存内部异常对象。

可以在创建异常对象时传入内部异常对象

Throwable(String message, Throwable cause)

Throwable(Throwable cause)

通过cause记录内部异常的异常打印效果


在创建新的异常后调后setStackTrace设置内部堆栈信息


无论哪种方式,只要内部异常堆栈没有丢失,就非常容易找到发生错误的代码。显示方式只是习惯问题。当然,最好在一个软件项目中可以制定规范,遵从某一种风格。


5.异常日志的输出流程


6.一些技巧

1. 对于已知不是程序内部错误的异常,可以不要打印错误信息。至少不要打印为了定位错误错误的异常堆栈的信息

例如:用户输入错误、已知的网络错误等

2. 对于大型软件(或访问量大)特别要注意日志的量(不要打的太多)。

3. 普通的调试日志还是在适当的时候删掉为好。

4. Log4j,在Dev环境让所有输出都定向到控制台,以方便查看。将下面文件放在类路径下。


 

 

分享到:
评论

相关推荐

    异常日志捕获ExceptionLog

    标题提到的“异常日志捕获ExceptionLog”是一种常见的实践,旨在记录应用运行过程中的错误和异常信息,以便后续分析和调试。 在AndroidManifest.xml文件中,我们通常会在`<application>`节点下添加自定义的应用类...

    Java将Exception信息转为String字符串的方法

    在 Java 中,我们可以使用多种方法来将 Exception 信息转换为 String 字符串,包括使用 Log4j 和 StringWriter 等方法。这些方法可以帮助我们更好地处理和记录异常信息,从而提高程序的可靠性和维护性。 在实际开发...

    product_swing_java自带log使用_swing皮肤定义_java_

    本文将深入探讨如何在Swing应用中使用Java自带的日志系统(logging API)以及如何自定义Swing界面的皮肤。 一、Java自带日志(logging API)的使用 Java内置的日志API提供了一种灵活且可配置的方式来记录应用程序...

    Java 中log4j 的使用

    Java中的Log4j是一个广泛应用的日志记录框架,它为开发者提供了灵活且强大的日志记录功能。Log4j的出现使得在Java程序中管理和追踪错误、警告、信息以及其他调试信息变得非常方便。本篇文章将深入探讨Log4j的核心...

    log4j日志记录对于exception的记录问题

    "log4j日志记录对于exception的记录问题"这个话题涉及到如何有效地使用Log4j,一个广泛使用的开源日志框架,来处理异常情况。Log4j允许我们定制日志级别,格式,以及存储位置,以满足不同项目的需要。 首先,Log4j...

    android中log对象的使用

    然后在对应的Activity类`LogDemo.java`中,定义一个静态常量`ACTIVITY_TAG`作为日志标签,并在`onCreate`方法中初始化Button。当Button被点击时,调用不同的Log方法输出不同级别的信息。 ```java public class Log...

    java应用使用log4j将日志发送到Kafka

    现在,当我们在Java代码中使用Log4j记录日志时,这些日志将被自动发送到配置的Kafka主题。例如: ```java import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class ...

    log4j包的使用说明及api帮助文档

    `3.log4j日志包的用法.docx`可能是一份关于如何在项目中使用log4j的指南,包括配置和代码示例。`log4j包的使用说明及api帮助文档`可能是更全面的教程,包含了更多实践指导和最佳实践。 总的来说,log4j为Java开发者...

    java动态日志注入工具anylog.zip

    anylog 为开发人员提供一个易于使用的平台,帮助开发人员在正在运行的系统中随时加入自己想要的日志,而免于修改代码和重启。 使用场景举例  1、一些同学在写代码时,把异常吃掉了,使得问题难以查找,可以...

    java.lang.NoClassDefFoundError: com/sun/activation/registries/LogSupport

    java.lang.NoClassDefFoundError: com/sun/activation/registries/LogSupport异常处理

    简单java操作log4j+Mysql存储日志信息

    在这个场景中,我们使用了SLF4J(Simple Logging Facade for Java)作为日志抽象层,它为各种日志框架提供了统一的API,而SLF4J-log4j12-1.5.0.jar和slf4j-api-1.5.0.jar正是SLF4J与Log4j之间的桥梁,使得我们可以...

    ssh中log4j的使用

    **在SSH框架中使用Log4j** 1. **导入Log4j API**:在需要使用Log4j的类中,首先需要导入对应的API。通常我们会使用`org.apache.log4j.Logger`。 ```java import org.apache.log4j.Logger; ``` 2. **获取Logger...

    Java throw Exception实现异常转换

    为了解决这个问题,我们需要将checked exception转换为unchecked exception,以便在stream API中使用。 三、如何使用Java throw Exception实现异常转换? Java throw Exception实现异常转换的原理是使用throw...

    log4net使用实例

    现在可以在代码中使用log4net记录日志了。首先,通过`log4net.LogManager.GetLogger()`获取一个Logger实例,然后调用它的`Debug()`, `Info()`, `Warn()`, `Error()`或`Fatal()`方法记录不同级别的日志。例如: ```...

    log4j简单的使用

    本教程将介绍如何在Java应用中简单使用log4j,包括其配置和API的使用。 **描述:“log4j的简单使用,提供使用步骤,有注释,有所需jar包”** 1. **所需jar包**:首先,你需要将log4j的核心库(log4j.jar)添加到...

    log4j使用实例.zip

    这个"log4j使用实例.zip"压缩包包含了关于如何在Java项目中配置和使用Log4j的示例代码,非常适合Java后端初学者学习。 首先,Log4j的核心组件包括Logger、Appender和Layout。Logger是日志信息的生产者,负责生成...

    java.lang.OutOfMemoryError: Java heap space 解决方法

    Java.lang.OutOfMemoryError: Java heap space 是 Java 中的一个常见错误,它发生时,Java 虚拟机 (JVM) 无法分配对象,因为堆空间不足。下面是解决该问题的一些方法: 原因分析 1. Java 虚拟机 (JVM) 内存过小:...

    log4j入门详解

    在Java代码中使用Log4j非常简单,只需要按照以下步骤操作: 1. 导入`org.apache.log4j.Logger`类。 2. 创建一个静态的`Logger`对象。 3. 使用`Logger`对象的方法(如`debug`、`info`、`warn`、`error`等)记录日志...

    安卓Java Web Socket简单使用

    本教程将介绍如何在Android应用中简单使用Java WebSocket。 首先,理解WebSocket的核心概念:WebSocket是一种在TCP层面上建立长连接的协议,不同于HTTP的一次性请求-响应模型。它提供了全双工通信信道,允许数据在...

    slf4j-log4j12-1.6.1.jar java包

    SLF4J(Simple Logging Facade for Java)和Log4j是Java开发中广泛使用的日志框架。SLF4J提供了一个抽象层,允许开发者在运行时插入所需的日志实现,比如Log4j、Logback等。这个"slf4j-log4j12-1.6.1.jar"文件是一个...

Global site tag (gtag.js) - Google Analytics