本文收藏自网络
1、 只记录技术上的异常,不记录用户异常
像“用户名已存在”这种异常是不用记录的,但是你需要把它们展示给用户。你需要记录的是类似“磁盘已满”这种技术上的异常,并对这些异常进行相应的处理。如果你把所有的异常都记录到你的日志中,那么你会因为有太多的异常记录,而无法对你日志文件中的异常做出有效处理。你需要研究日志文件中的每一个异常,猜测造成它的原因(“这是个bug吗?”)。太多的异常会让你对日志文件中的日志形成一种草率的心态(“啊哈,不就是个异常嘛”)
2、 在你的异常类中存储数据以便于日志记录
比如说,“不能从账户中取钱”这个异常,你应该像junit那样(“excepted but got …”)去记录异常信息,以便于调试。
CannotChargeMoneyAccountException(Money moneyInAccount, Money toCharge, Account account)
提示信息可以是:“视图从账户‘1234’中取20欧元,但是仅有10欧元可用”。相比“取钱失败”,这样做使得用针对性的方式来处理异常变得更加简单
3、 记录异常的详细描述
JDK中有一个非常负面的例子:ClassCastException长久以来就没有告诉你要把一个对象转型成什么类时发生的异常。
现在它甚至检测了:
final String s = "Hello";
final int x = (Integer) s;
然后告诉你:
T.java:4: inconvertible types
found : java.lang.String
required: java.lang.Integer
final Integer x = (Integer) s
现在运行时java抛出的异常如下:
Exception in thread "main" java.lang.ClassCastException:
java.lang.String cannot be cast to java.lang.Integer
比以前好多了。
4、 输出所有导致异常发生的原因
如果你的异常是一个封装了诱因的异常,那么在异常中记录所有的诱因。有些日志框架已经为你做了这些,而有些却没有。一定要在你的日志文件中记录所有的原因。
5、 按正确的级别记录
假设你的异常是致命的,那么以Level.Critical级别来记录。你需要自己定义致命对于你来说意味着什么(很多时候它意味着钱少了)。
比如说,假设一个功能不起作用了,或者因为技术问题一个用户不能注册了,这时就有一个致命的问题需要你去解决了。
为致命问题监控日志文件,你的钱正在流失。
实现isCritical()方法的异常类或者一个CriticalException接口,然后检测记录异常时是否按正确的级别进行记录。如果你的日志框架中没有合适的级别,生成一个
6、 不要记录后又抛出一个异常
记录日志又抛出一个异常是异常反面模式(注:就是反面教材的模式)
catch (NoUserException e) {
LOG.error("No user available", e);
throw new UserServiceException("No user available", e);
}
不要这样做。不然你的日志文件中会对同一个异常在不同的堆栈记录几次。只记录一次异常。
7、 不要用System.out or System.err来记录日志
使用日志框架,它能比你更好的处理记录日志。
相关推荐
在`struts.xml`配置文件中,可以通过`<exception-mapping>`元素定义异常处理规则。例如,可以指定一个特定类型的异常应重定向到哪个结果页面,或者设置一个默认的异常处理策略。 4. **全局异常处理** 使用`...
2. **Struts-config.xml配置异常处理**:在框架配置文件中,`<global-exceptions>`标签用于定义全局异常处理规则。例如: ```xml ``` 这段配置表示,如果任何地方抛出了`java.lang.Exception`或其子类,...
在.NET开发中,遵循一定的异常处理规则能够有效地预防程序意外终止,提供更好的用户体验,并有助于调试和维护。以下是一些关键的异常处理原则和最佳实践: 1. **全面捕获异常**: 上层应用应该捕获所有可能的异常...
Struts2提供了ActionError和FieldError接口,允许我们在Action类中捕获并添加错误信息,然后通过配置struts.xml文件,定义全局或特定Action的异常处理规则,使这些错误以JSON格式响应。 首先,你需要在Action类中抛...
1. **全局异常映射(Global Exception Mapping)**:在`struts.xml`或相关的配置文件中,可以通过`<exception-mapping>`标签来定义全局异常处理规则。例如,我们可以指定当出现特定类型的异常时,转发到某个特定的...
异常概述 •异常处理已经成为衡量一门语言是否成熟的标准... 异常处理规则 •不要过度使用异常 •不要使用过于庞大的try块 •避免使用Catch All语句 •不要忽略捕获到异常 。。。。。。。。。。。。。
例如,我们可以定义不同的策略来处理不同类型的异常,或者设置全局的异常处理规则。 总的来说,这个解决方案提供了一套完整的异常处理流程,涵盖了从捕获异常到显示错误信息的各个方面。通过自定义Action、...
5. **异常处理规则及注意事项** - **停线标准**:不良率超过一定阈值时,品质部开具《停线报告》或《异常处理单》。 - **反馈时限**:异常反馈后30分钟内未给出指示,生产有权停线。 - **临时解决措施**:PE需...
通过使用`BEGIN...EXCEPTION...END`块,我们可以定义一组特定的异常处理规则。例如: ```sql DECLARE v_count NUMBER; BEGIN SELECT COUNT(*) INTO v_count FROM non_existent_table; EXCEPTION WHEN NO_DATA_...
此外,Struts2还提供了`struts-plugin.xml`文件,允许我们在插件中定义异常处理规则,这在开发插件或者第三方库时非常有用。通过这种方式,插件可以提供自己的异常处理机制,而不影响主应用的配置。 总之,Struts2...
Windows 异常处理流程是操作系统核心中的一个重要组成部分,它用于管理程序执行期间出现的各种错误和异常情况。在Windows操作系统中,异常处理流程涉及到处理器状态的改变、异常处理程序的调用以及程序错误的恢复或...
这是Java强制性的异常处理规则,目的是确保程序员能够明确地考虑并处理可能出现的问题。 不可查异常,也称为运行时异常,是`RuntimeException`及其子类,如`NullPointerException`、`...
此外,Java编译器强制执行异常处理规则,确保每个可能抛出异常的方法要么自己处理,要么声明可能抛出的异常,以便调用者处理。 总的来说,异常处理是Java中不可或缺的一部分,它提供了一种有效的机制来处理运行时...
2. 预定义规则:建立预定义的异常处理规则,如自动扩容、重启服务、隔离故障节点等。 3. 自动修复:利用机器学习和人工智能技术,自动诊断问题并实施修复操作。 4. 事件管理:自动化事件记录、追踪和报告,便于后期...
首先,我们需要在`struts.xml`配置文件中定义`<package>`元素,通常我们为每个业务逻辑或模块创建一个包,并在此包下定义异常处理规则。例如: ```xml <!-- 异常处理配置 --> <!-- 具体动作配置 --> ...
为了确保异常处理的一致性和有效性,需要制定一套异常处理规则。这些规则包括但不限于: - **异常分类**:根据异常的类型进行分类,便于统一处理; - **异常捕获**:定义何时以及如何捕获异常; - **异常上报**:...
异常处理 C 语言程序设计教程 C 输入输出流 PPT 课件 本资源摘要信息来自 Exception Handling in C Programming Design Tutorial PPT Courseware,总页数为 18 页,主要讲解了 C 语言程序设计中异常处理的概念、...
Python中的异常处理是编程实践中非常重要的一个概念,它允许开发者优雅地处理程序运行时可能出现的错误,确保程序的稳定性和用户体验。本节将详细介绍Python中的错误和异常,以及如何利用异常处理机制进行程序的错误...
Java异常处理的9个最佳实践涵盖了开发者在进行Java编程时应当遵循的一系列规则和方法,以确保代码的健壮性和可维护性。异常处理是编程中的一个重要部分,它能够帮助我们更有效地管理和响应程序运行时的错误情况。 ...
本文将详细介绍如何编写带有异常处理的C#闰年源代码,以及关于闰年的一些基本概念。 首先,让我们了解什么是闰年。闰年是为了弥补因地球公转周期与太阳年不完全吻合而引入的调整。通常,闰年有366天,而非闰年则为...