Java中的高级异常处理与日志记录

Java中的高级异常处理与日志记录

大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!

在Java开发中,异常处理和日志记录是两个至关重要的方面。良好的异常处理机制可以提高系统的健壮性,而日志记录则为系统的维护和故障排查提供了宝贵的信息。本文将深入探讨Java中的高级异常处理与日志记录技术,并结合实际代码示例进行说明。

1. Java中的异常处理

Java中的异常处理是通过try-catch-finally结构来实现的。常见的异常类型包括RuntimeExceptionIOExceptionSQLException等。在基本的异常处理之外,高级异常处理技术可以进一步增强系统的可靠性和可维护性。

1.1 自定义异常

自定义异常可以帮助我们更清晰地表达程序中的错误情况。

示例代码:

package cn.juwatech.exception;public class CustomException extends Exception {public CustomException(String message) {super(message);}public CustomException(String message, Throwable cause) {super(message, cause);}
}

1.2 使用自定义异常

package cn.juwatech.service;import cn.juwatech.exception.CustomException;public class UserService {public void getUserById(Long id) throws CustomException {if (id == null) {throw new CustomException("User ID cannot be null");}// 模拟获取用户的逻辑System.out.println("Fetching user with ID: " + id);}
}

1.3 异常链

异常链允许我们将一个异常包装在另一个异常中,从而保留原始异常的堆栈信息。

示例代码:

package cn.juwatech.service;import cn.juwatech.exception.CustomException;public class UserService {public void getUserById(Long id) throws CustomException {try {// 模拟可能抛出异常的代码if (id == null) {throw new NullPointerException("ID is null");}} catch (Exception e) {throw new CustomException("Error fetching user by ID", e);}}
}

2. 日志记录

日志记录是软件系统中不可或缺的一部分,能够帮助开发人员在开发、调试和维护阶段跟踪程序的运行状态。Java中常用的日志框架包括Log4j、Logback和Java Util Logging(JUL)。

2.1 使用Log4j2进行日志记录

Log4j2是一个功能强大的日志框架,具有高性能和灵活的配置。

2.1.1 引入依赖

pom.xml中添加Log4j2依赖:

<dependencies><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.14.1</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.14.1</version></dependency>
</dependencies>

2.1.2 配置Log4j2

创建log4j2.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></Console></Appenders><Loggers><Root level="info"><AppenderRef ref="Console"/></Root></Loggers>
</Configuration>

2.1.3 使用Log4j2进行日志记录

package cn.juwatech.service;import cn.juwatech.exception.CustomException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;public class UserService {private static final Logger logger = LogManager.getLogger(UserService.class);public void getUserById(Long id) throws CustomException {logger.info("Fetching user with ID: {}", id);try {if (id == null) {throw new NullPointerException("ID is null");}// 模拟获取用户的逻辑} catch (Exception e) {logger.error("Error fetching user by ID", e);throw new CustomException("Error fetching user by ID", e);}}
}

3. 高级异常处理与日志记录的结合

通过结合使用高级异常处理和日志记录,可以提高系统的健壮性和可维护性。在实际项目中,我们可以使用AOP(面向切面编程)来统一处理异常和记录日志。

3.1 使用Spring AOP处理异常和记录日志

首先,添加Spring AOP依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

3.2 定义一个全局异常处理切面

package cn.juwatech.aspect;import cn.juwatech.exception.CustomException;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;@Aspect
@Component
public class GlobalExceptionHandlerAspect {private static final Logger logger = LogManager.getLogger(GlobalExceptionHandlerAspect.class);@AfterThrowing(pointcut = "execution(* cn.juwatech.service.*.*(..))", throwing = "ex")public void handleServiceException(CustomException ex) {logger.error("Service exception: {}", ex.getMessage(), ex);}
}

在上述代码中,我们定义了一个全局异常处理切面GlobalExceptionHandlerAspect,用于捕获并记录所有CustomException异常。

3.3 在服务类中使用注解

package cn.juwatech.service;import cn.juwatech.exception.CustomException;
import org.springframework.stereotype.Service;@Service
public class UserService {public void getUserById(Long id) throws CustomException {if (id == null) {throw new CustomException("User ID cannot be null");}// 模拟获取用户的逻辑System.out.println("Fetching user with ID: " + id);}
}

总结

本文详细介绍了Java中的高级异常处理与日志记录技术,包括自定义异常、异常链和日志记录的实现方法。通过结合使用Spring AOP,可以实现全局异常处理和统一日志记录,从而提高系统的健壮性和可维护性。希望本文能够帮助大家更好地理解和应用这些技术,提升Java项目的开发效率和代码质量。

微赚淘客系统3.0小编出品,必属精品!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/41259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何选择视频号矩阵系统源码:关键要素与决策指南

在短视频和直播内容迅速崛起的今天&#xff0c;视频号矩阵系统源码成为了企业和个人创作者高效管理视频内容的重要工具。选择合适的视频号矩阵系统源码&#xff0c;可以极大提升内容发布的效率和质量&#xff0c;同时优化用户体验。本文将提供一套选择视频号矩阵系统源码的指南…

MYSQL篇二:数据库的操作

文章目录 1. 创建数据库1.1 查看数据库列表1.2 创建与删除数据库 2. 数据的编码问题3. 字符集和校验规则3.1 查看系统默认字符集以及校验规则3.2 查看数据库支持的字符集3.3 查看数据库支持的字符集校验规则3.4 校验规则对数据库的影响 4. 操纵数据库4.1 查看当前是哪一个数据库…

小程序渗透测试的两种方法——burpsuite、yakit

首先呢主要是配置proxifier&#xff0c;找到小程序的流量&#xff0c;然后使用burpsuite或者yakit去抓包。 一、使用burpsuiteproxifier的抓包测试 1、先配置proxifier&#xff0c;开启http流量转发 勾选确定 2、配置burp对应代理端口&#xff0c;选择profile&#xff0c;点…

java自带工具对象转xml

java自带工具对象转xml&#xff0c;工具是jaxbContext,不废话&#xff0c;直接上代码 java对象 package com.configure.util;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import javax.xml.bind.annotation.XmlAccessType; impo…

《梦醒蝶飞:释放Excel函数与公式的力量》8.7 STDEV函数

8.7 STDEV函数 STDEV函数是Excel中用于计算一组数值的标准偏差的函数。标准偏差是统计学中的一个重要指标&#xff0c;用于衡量数据集中各数值偏离平均值的程度。它反映了数据的离散程度或波动大小。 8.7.1 函数简介 STDEV函数用于返回样本数据的标准偏差&#xff0c;标准偏…

软件测试面试1000问(含答案)

1、自动化代码中,用到了哪些设计模式? 单例设计模式工厂模式PO设计模式数据驱动模式面向接口编程设计模式 2、什么是断言( Assert) ? 断言Assert用于在代码中验证实际结果是不是符合预期结果&#xff0c;如果测试用例执行失败会抛出异常并提供断言日志 3、什么是web自动化…

地图下载工具

1 概述 做仿真的&#xff0c;一般都要用到地图。各大地图厂商&#xff0c;都提供了地图测试接口。只不过&#xff0c;这些接口有限制&#xff0c;用多了就容易被封IP。于是我写了一个瓦片地图下载工具&#xff0c;把地图下载到本地&#xff0c;就可以愉快的玩耍了。 2 操作 …

文字识别技术升级:Airtest与PaddleOCR模型的协作小技巧

一、前言 在进行自动化测试的过程中&#xff0c;ocr文字识别一直是大家最想要实现以及最需要的能力&#xff0c;今天就来介绍一个由百度飞浆提供的一个免费的ocr识别库——PaddleOCR&#xff0c;以及探讨一下&#xff0c;PaddleOCR与Airtest协作能擦出怎么样的火花~ 二、Padd…

python读取写入txt文件

读取 txt 文件 def read_txt_file(file_path):"""读取文本文件的内容:param file_path: 文本文件的路径:return: 文件内容"""try:with open(file_path, r, encodingutf-8) as file:content file.read()return contentexcept FileNotFoundError…

打包 最新血液净化器制作技术和资料

网盘 https://pan.baidu.com/s/1fm3LF20dCvy4iSMQklHpug?pwd4je2 便携可穿戴可血液净化用器件及其制备方法和应用.pdf 基于贻贝仿生化学的血液净化材料及其制备方法.pdf 膜分离式一体化血液净化系统.pdf 血液净化器固定夹.pdf 血液净化膜及其制备方法和应用.pdf 评估血液净化…

【手机取证】如何使用360加固助手给apk加固

文章关键词&#xff1a;手机取证、电子数据取证、数据恢复 一、前言 APP加固是对APP代码逻辑的一种保护。原理是将应用文件进行某种形式的转换&#xff0c;包括不限于隐藏&#xff0c;混淆&#xff0c;加密等操作&#xff0c;进一步保护软件的利益不受损坏&#xff0c;下面给…

生成式人工智能如何改变软件开发:助手还是取代者?

生成式人工智能如何改变软件开发&#xff1a;助手还是取代者&#xff1f; 生成式人工智能&#xff08;AIGC&#xff09;正在引领软件开发领域的技术变革。从代码生成、错误检测到自动化测试&#xff0c;AI工具在提高开发效率的同时&#xff0c;也引发了对开发者职业前景的讨论…

Java面试八股之MySQL的pconenct和connect有什么区别

MySQL的pconenct和connect有什么区别 在PHP中&#xff0c;mysql_pconnect() 和 mysql_connect() 是用来建立与MySQL数据库服务器连接的两个函数&#xff0c;它们的主要区别在于连接的持久性。 mysql_connect(): 这个函数每次调用都会尝试创建一个新的数据库连接。 当PHP脚本…

天猫超市卡怎么用

猫超卡是在天猫超市里面消费用的卡 但是我们现在买东西都喜欢货比三家&#xff0c;肯定是哪家划算在哪买&#xff0c;要是淘宝其他店铺或京东卖的更便宜&#xff0c;猫超卡自然就用不上了 这种情况的话&#xff0c;还不如直接把猫超卡的余额提出来&#xff0c;买东西也不受限…

什么是私域流量?私域流量为什么越来越多人做?

在当今这个信息爆炸、注意力稀缺的时代&#xff0c;企业的营销策略正经历着前所未有的变革。其中&#xff0c;私域流量作为近年来崛起的重要概念&#xff0c;正逐步成为众多品牌与商家竞相追逐的焦点。那么&#xff0c;私域流量究竟是什么&#xff1f;它为何能吸引如此多的关注…

【网络安全】漏洞挖掘之Spring Cloud注入漏洞

漏洞描述 Spring框架为现代基于java的企业应用程序(在任何类型的部署平台上)提供了一个全面的编程和配置模型。 Spring Cloud 中的 serveless框架 Spring Cloud Function 中的 RoutingFunction 类的 apply 方法将请求头中的“spring.cloud.function.routing-expression”参数…

【Python学习笔记】菜鸟教程Scrapy案例 + B站amazon案例视频

背景前摇&#xff08;省流可以跳过这部分&#xff09; 实习的时候厚脸皮请教了一位办公室负责做爬虫这块的老师&#xff0c;给我推荐了Scrapy框架。 我之前学过一些爬虫基础&#xff0c;但是用的是比较常见的BeautifulSoup和Request&#xff0c;于是得到Scrapy这个关键词后&am…

C++实现简化 QtBase(5):通过IEventLoopHost扩展实现win32消息循环

在上一篇文章《C实现简化版Qt的QObject&#xff08;4&#xff09;&#xff1a;增加简单实用的事件机制》中&#xff0c;我们实现了普通线程的事件机制。 但是事件机制往往需要和操作系统主线程消息循环一起工作。 因此&#xff0c;今天&#xff0c;我们在之前的CEventLoop的实…

数据结构-循环链表和双向链表

目录 前言一、循环链表1.1 循环链表的介绍1.2 循环链表的实现 二、双向链表2.1 双向链表的介绍2.2 双向链表的实现 三、循环双链表总结 前言 本篇文章介绍数据结构中的循环链表和双向链表 一、循环链表 1.1 循环链表的介绍 将单链表的形式稍作改变&#xff0c;单链表的最后…

swagger路径怎么设置为不曝露

为了确保 Swagger UI 不暴露在外部访问下&#xff0c;可以采取以下几种方法来限制访问&#xff1a; 方法1&#xff1a;通过认证和授权限制访问 为 Swagger UI 页面设置访问控制&#xff0c;确保只有授权用户才能访问。 1.1 Spring Security 如果使用的是 Spring Boot&#…