Java异常与日志处理--JDK Logging、Commoms、Log4j

Java异常与日志处理--JDK Logging、Commoms、Log4j


博主在早期写过一篇Java异常基础知识的博客--传送门,基于之前的基础下,本博客旨在巩固基础知识点,重点介绍更加高级的日志处理!一起来操作吧!


目录

1. Java异常概述

2. catch、finally

3. 异常的传播

4. 自定义异常

5. 日志管理---断言

6. 日志管理--Logging 

7. 日志管理--Commons Logging 

8. 日志管理--Log4j 


1. Java异常概述

Java异常也是Class,继承关系如下:

  • Throwable
  1. Error
  2. Exception

RuntimeException

 Java的异常体系图如下:

 Java异常注意事项

  • 必须捕获的异常:
  1. Exception及其子类,但不包括RuntimeException及其子类
  2. Exception及其子类称为Checked Exception
  • 不需要捕获的异常:
  1. Error及其子类
  2. RuntimeException及其子类
  • Error是发生了严重的错误(程序对此一般无能为力的):

OutOfMemeryError、NoClassDefFoundError、StackOverflowError...

  • Exception是发生了运行时逻辑错误,应该捕获异常并处理:
  1. 捕获并处理错误:IOException、NumberFormatException...
  2. 修复程序:NullPointerException、IndexOutOfBoundsException... 

声明异常

  • 对可能抛出Checked Exception的方法调用:
  1. 捕获Exception并处理

  •  不捕获但通过throws声明

  • 通过throws声明仍需要在上层捕获

  •  main()是最后捕获Exception的方法

总结

  •  Java使用异常来表示错误,并通过try{...}catch{...}捕获异常
  • Java的异常是class,并且从Throwable继承
  • Error是无需捕获的严重错误
  • Exception是应该捕获的可处理的错误
  • RuntimeException无需强制捕获,非RuntimeException(Checked Exception)需强制捕获,用throws声明。

2. catch、finally

catch、finally概述

  • catch的顺序非常重要:子类必须写在前面

  •  finally语句块保证有无错误都会执行

  • multi-catch,如果某些异常的处理逻辑相同:
  1. 不存在继承关系,必须编写多条catch子句

  1. 可以用“|”表示多种Exception

 总结

  • catch子句的匹配顺序非常重要,子类必须放在前面
  • finally子句保证有无异常都会执行
  • catch可以匹配多个非继承关系的异常(JDK>=1.7)

3. 异常的传播

当某个方法抛出异常时:

  • 如果当前方法没有捕获,异常就被抛到上层调用方法
  • 直到遇到某个try...catch被捕获
  • printStackTrace()可以打印出方法的调用栈

如果一个方法捕获了某个异常后又在catch子句中抛出新的异常,就相当于把抛出的异常类型“转换”了:

  • 新的Exception可以持有原始异常信息

在抛出异常前:

  • finally语句会保证执行
  • 如果finally语句抛出异常,则catch语句不再抛出
  • 没有被抛出的异常称为”被屏蔽“的异常(Suppressed Exception)

 处理Suppressed Exception

如何保存所有的异常信息?

  • 用origin变量保存原始异常
  • 如果存在原始异常,用addSuppressed()添加新异常
  • 如果存在原始异常,或者新异常最后在finally抛出

如何获取所有的异常信息?

  • 用getSuppressed()获取所有Suppressed Exception

总结

  • printStackTrace()可以打印异常的传播栈,对于调试非常有用
  • 捕获异常并再次抛出新的异常时,应该持有原始异常信息
  • 如果在finally中抛出异常,应该把新抛出的异常添加到原有异常中
  • 用getSuppreessed()可以获取所有添加的Suppressed Exception
  • 处理Suppressed Exception要求JDK>=1.7

 4. 自定义异常

JDK定义的常用异常

  • RuntimeException
  1. NullPointerException
  2. IndexOutOfBoundsException
  3. SecurityException
  4. illegalArgumentException

NumberFormatException

  • IOException
  1. UnsupportedCharsetException、FileNotFoundException、SocketException...
  • ParseException、GeneralSecurityException、SQLException、TimeOutException...

自定义异常

自定义新的异常类型:

  • 从适合的Exception派生
  • 从RuntimeException派生——继承RuntimeException不需要强制捕获自定义异常,不需要再方法中声明要抛出的异常

自定义新的异常关系树:

  • 从适合的Exception派生BaseException
  • 其他Exception从BaseException派生

自定义异常应该提供多个构造方法:

总结

  • 自定义异常应该从合适的Exception派生
  • 推荐RuntimeException
  • 自定义异常应该提供多个构造方法
  • 可以使用IDE根据父类快速创建构造方法 

5. 日志管理---断言

断言概述

  • 断言Assertion是一种程序调试方法
  1. 使用assert关键字
  2. 断言条件预期为true
  3. 如果断言失败抛出AssertionError
  4. 可选的断言消息

  • 断言特点
  1. 断言失败时会会抛出AssertionError,导致程序结束退出
  2. 不能用于可恢复的程序错误
  3. 只应该用于开发和测试阶段

断言的使用

  • 启动断言(JVM默认关闭断言指令)
  1. 给JVM传递-ea参数启动断言
  2. 可以指定特定的类启动断言-ea:com.sc.sample.TestAssert
  3. 可以指定特定的包启动断言-ea:com.sc... 
  • 具体步骤如下:

(1)编辑代码,直接运行

(2)JVM中配置,输入 ea:包名路径.类名 

(3)再运行 

总结 

  • 断言是一种调试方式,断言失败会抛出AssertionError
  • 只能在开发和测试阶段启用断言
  • 对可恢复的错误不能使用断言,而应该抛出异常
  • 断言很少被使用,更好的方法是编写单元测试

6. 日志管理--JDK Logging 

Logging概述

问:什么是日志Logging?

  • 为了取代System.out.println();
  • 可以设置输出样式
  • 可以设置输出级别,禁止某些级别输出
  • 可以比呃呃重定向到文件
  • 可以按包名控制日志级别

JDK Logging:JDK内置的Logging,在java.util.logging包下

JDK Logging概述

JDK Logging定义了7个日志级别:

  • SEVERE
  • WARNING
  • INFO —— 默认级别
  • CONFIG
  • FINE
  • FINER
  • FINEST

JDK Logging的局限性:

  • JVM启动时读取配置文件并完成初始化
  • JVM启动后无法修改配置
  • 需要在JVM启动时传递参数:  -Djava.util.logging.config.file=config-file-name

JDK Logging实现

 

总结

  • 日志是为了替代System.out.println();可以定义格式,重定向到文件等
  • 日志可以存档,便于追踪问题
  • 日志记录可以按级别分类,便于打开或关闭某些级别 
  • 可以根据配置文件调整日志,无需修改代码
  • JDK提供了Logging:java.util.logging

7. 日志管理--Commons Logging 

Commons Logging概述

​​​​​​​Commons Logging是Apache创建的日志模块:

  • 可以挂接不同的日志系统
  • 可以通过配置文件指定挂接的日志系统
  • 可以自动搜索使用Log4j
  • 使用JDK Logging(JDK>=1.4)

Commons Logging定义了6个日志级别:

  • FATAL
  • ERROR
  • WARNING
  • INFO  —— 默认级别
  • DEBUG
  • TRACE

Commons Logging的使用 

  • 创建Commons Logging的3种方法
  1. ​​​​​​​在静态方法种引用Log: static final Log log=LogFactory.getLog(类名.class);
  2. 在实例方法中引用Log:final Log log=LogFactory.getLog(getClass());
  3. 在父类中实例化Log:protected final Log log=LogFactory.getLog(getClass());
  • commons Logging使用详细步骤如下

​​​​​​​​​​​​​​(1)添加commons-logging-1.2.jar——可自行在commons.apache.org官网下载--传送门--

​​​​​​​

注:在Eclipse下创建lib目录将jar包添加进去,右击jar包Build Path即可

(2)编写代码测试

​​​​​​​

总结

  • Commons Logging是使用最广泛的日志模块
  • Commons Logging的API非常简单
  • Commons Logging可以自动使用其他日志模块

8. 日志管理--Log4j 

Log4j概述

  • Log4j是目前最流行的日志框架:1.x——Log4j;2.x——Log4j2
  • 3种位置输出流程如下:

  • Commons Logging如果在classpath种发现了Log4j,就自动使用Log4j 

实践推荐

  • 始终使用Commons Logging接口来写入日志
  • 开发阶段无需引入Log4j
  • 使用Log4j只需要把正确的配置文件和相关jar包放入classpath即可
  • 使用配置文件可灵活修改日志,无需修改代码

Log4j的使用

  • 使用步骤如下:

(1)添加Log4j的jar包支持——可自行在Log4j官网--传送门--下载

(2)编写代码

注:于Commons Logging的代码完全相同,不需要修改

(3)***编写log4j2.xml文件——重点

(4)运行结果显示 

总结

  • 通过Commons Logging实现日志,不需要修改diamagnetic即可使用Log4j
  • 使用Log4j只需要把log4j2.xml和相关jar放入classpath
  • 如果要更换Log4j,只需要移除log4j2.xml和相关jar
  •  只有扩展Log4j时才需要引入Log4j的接口

日志处理这块只需第一次配置完毕基本上就不需要管了,以后对日志的管理只需要修改以下log4j2.xml文件即可,非常的方便简单。注意博客中实践推荐等内容,保证高效的开发!——JavaSE知识将在近期更新,欢迎关注?---知飞翀---?

                                                             谢谢阅读                     ----知飞翀

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: aspose-words-19.3-jdk17.jar-java 是一个 Java 库,用于处理 Word 文档。它提供了一套丰富的功能和方法,允许开发人员在 Java 应用程序中读取、创建、编辑和转换 Word 文档。 使用 aspose-words-19.3-jdk17.jar-java,可以轻松地将 Word 文档导入到 Java 应用程序中,并以编程方式访问和修改其中的内容。这个库支持各种 Word 文档格式,如 DOC、DOCX、RTF 等。可以使用它来提取文本、插入或删除段落、添加或删除图片、设置样式和格式等。 这个库还提供了强大的转换功能,可以将 Word 文档转换为其他格式,比如 PDF、HTML、EPUB 等。同时,也可以将其他格式的文档转换为 Word 文档。 aspose-words-19.3-jdk17.jar-java处理 Word 文档时提供了高度的可定制性。开发人员可以根据自己的需求设置字体、颜色、段落格式、页眉页脚等等。此外,它还支持在文档中插入书签、超链接、表格、图表等,以满足更复杂的需求。 总之,aspose-words-19.3-jdk17.jar-java 是一个功能强大、易于使用的 Java 库,适用于处理 Word 文档。它可为开发人员提供丰富的功能和方法,让他们能够方便地读取、创建、编辑和转换 Word 文档。无论是对于个人使用还是开发团队,这个库都是一个非常有价值的工具。 ### 回答2: aspose-words-19.3-jdk17.jar是一个Java库,用于处理Word文档。它提供了丰富的功能和API,可以读取、修改和创建Word文档。通过它,我们可以在Java应用程序中实现对Word文档的自动化处理。 使用aspose-words-19.3-jdk17.jar,我们可以轻松地读取现有的Word文档,并提取其中的文本、表格、图像等元素。同时,还可以编辑文档的样式、格式和布局。例如,我们可以插入、删除或合并段落,设置字体、字号、颜色等。 这个库还提供了对Word文档的导出和转换功能。我们可以将文档保存为PDF、HTML、XML或其他流行的格式。此外,我们还可以将Word文档转换为其他Office应用程序的格式,如Excel或PowerPoint。 aspose-words-19.3-jdk17.jar还支持Word模板的创建和填充。我们可以使用预定义的模板,向其添加数据,并将其保存为新的Word文档。这对于生成报告、信函、合同等标准格式的文档非常有用。 总而言之,aspose-words-19.3-jdk17.jar是一个功能强大的Java库,提供了处理Word文档的丰富功能和API。它可以帮助我们在Java应用程序中实现对Word文档的读取、编辑、导出和转换。无论是处理现有文档还是生成新的文档,它都是一个非常有用的工具。 ### 回答3: Aspose.Words是一个强大的Java库,用于处理和操作Microsoft Word文档。版本19.3是指该库的19.3版本,该版本具有很多功能和改进。 Aspose.Words可以在Java应用程序中创建,读取,操作和转换Word文档。使用该库,您可以轻松地访问文档的内容,如文本,图片,表格,样式和格式。您可以添加,删除和修改文档的内容,包括段落,表格,图像等。您还可以应用不同的格式和样式,如字体,颜色,段落间距等。 此外,Aspose.Words还支持文档的转换功能。您可以将Word文档转换为其他格式,如PDF,HTML,纯文本等。同样,您也可以将其他格式的文件转换为Word文档。这使得Aspose.Words成为一种非常有用的工具,适用于处理和转换各种类型的文档。 Aspose.Words 19.3版特别为JDK17设计,以确保与最新的Java开发环境兼容。这意味着您可以在使用JDK17的项目中无缝集成和使用Aspose.Words库,无需担心任何兼容性问题。 总而言之,Aspose.Words 19.3-jdk17.jar是一个功能强大的Java库,它为您提供了处理和操作Microsoft Word文档的能力。它支持多种功能,如创建,读取,修改和转换Word文档。此库与JDK17兼容,可以轻松地集成到Java项目中,并为您的文档处理需求提供强大的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值