`
zhang_xzhi_xjtu
  • 浏览: 536534 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一个异常应该在一个log文件里面出现一次且只有一次

阅读更多
系统报了一堆异常,吓人一跳,看了看,发现有一个异常在同一个文件中,打了多次的情况。
比如A->B,B->C,C系统有一个异常,打到了error.log中,然后又向上抛,B捕获了这个异常,打到了error.log中,又向上抛,C系统捕获了这个异常,打到了error.log中。

感觉这种记录异常的方式是不合理的。

当时这么做的思路是所有的异常打在一个文件里面,方便排查故障。

但是这种一个root cause的异常在同一个文件打多次应该是不必要的。

传统的做法是一个异常只打一次log,但是这个只是一个理想情况,我的想法是,一个系统对于同一个root cause的异常只应该记录一次。

以上面的例子为例,C把异常打到c.error.log中,抛出去,B把异常打到b.error.log中,抛出去,A把异常打到a.error.log中。同时,所有的异常应该保留异常堆栈,这样,不论是在A还是B还是C都可以看到这个异常的真正的root cause。
分享到:
评论
5 楼 抛出异常的爱 2010-11-15  
runtimeexception
只打二次.
4 楼 snovian 2010-11-15  
如果声明抛出异常,就不应该记录也不应该捕获
3 楼 linliangyi2007 2010-11-15  
我觉得这个问题的关键是,系统在哪个层面上拦截/处理异常?
从设计上说,层层往上抛异常,层层记录,却不处理,这样的设计有缺陷的。

底层的异常应该对上层屏蔽,外部API调用可能得到一个false或者null的结果,但不是异常本身。
2 楼 xixix2004 2010-11-15  
这个不是什么技术问题吧。

1,异常从C抛到B,再从B抛到A,A的异常堆栈信息能保存相应的信息。
2,C,B不能处理异常为什么要捕获。

很简单的方法,B,C直接抛出,只在A捕获,打印异常信息即可。

捕获异常的奥义:谁有能力处理谁捕获。

你懂的。
1 楼 grave 2010-11-14  
用logback貌似就可以实现

相关推荐

    c++记录日志到文件里面

    可以提供一个静态方法来完成这个任务,确保文件只在程序开始时打开一次。 4. **记录日志**:为`Logger`类添加一个模板方法,如`log()`,它接受日志级别和日志消息作为参数。在这个方法中,先格式化日志信息(包括...

    文件的上传与下载及服务器文件管理全套代码

    - 为了提高性能,大文件上传可能需要分块处理,使用流式处理避免一次性加载整个文件到内存。 - 服务器文件管理需要考虑权限系统,如基于角色的访问控制(RBAC),确保只有授权的用户能执行特定操作。 6. **数据库...

    如何编写批处理文件批处理文件批处理文件

    在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。当然我们...

    Xluo大型文件上传下载系统源码 v1.0

    系统目录里面附带程序日志记录文件,程序的每一次异常都会存储在XluoUpAndDown.log文件里面。 您可以随时查询系统运行情况。 Upload目录是文件存放目录,因程序写死,请勿改动目录,谢谢。 App_Code目录里面有...

    python面试题及答案.txt

    全局解释器锁(GIL)是CPython解释器(Python的官方实现)的一个内部机制,它确保任何时候只有一个线程在执行Python字节码。这意味着即使在一个多核处理器上,Python的线程也不能同时运行,从而限制了多线程程序的...

    reactor_friendft3_冒险岛_drivingh87_

    在这个压缩包中,只有一份名为"reactor"的文件,这很可能是一个包含了所有reactor相关脚本的集合,可能包括了各种reactor的定义、行为逻辑、触发条件和响应机制。开发者可能需要通过阅读和理解这些脚本来进行游戏的...

    别在Java代码里乱打日志了,这才是正确的打日志姿势

    在Java编程中,日志记录是一项至关重要的任务,它能够帮助开发者在系统出现问题时快速定位错误,跟踪系统运行状态,并优化程序性能。然而,随意地在代码中添加日志语句不仅会影响代码的整洁性,还可能导致不必要的...

    IIS6.0 IIS,互联网信息服务

    比如你本机只有一个IP地址为192.168.0.1,你已经建立(或设置)好了两个Web站点,一个是“默认Web站点”,一个是“我的第二个Web站点”,现在你想输入“www.enanshan. com”可直接访问前者,输入“www.popunet. com...

    X-Scan

    “顺序执行针对服务的破坏性脚本” - 如果一个脚本正在尝试D.O.S某个服务,另一个脚本同时在获取该服务信息,或同时有其他脚本尝试溢出该服务,将导致扫描结果不正确。但如果脚本间不需要互相等待,将会节省...

    强大的扫描工具x-scan

    Q:为什么在一次扫描中我选择了“SYN”方式进行端口扫描,但X-Scan实际采用的是“TCP”方式, 而且也没有被动识别出目标操作系统? A:端口扫描中的“SYN”方式在NT4或XP+SP2系统下无法使用,在windows 2000等...

    x-SCAN -V3.3-CN.

    Q:为什么在一次扫描中我选择了“SYN”方式进行端口扫描,但X-Scan实际采用的是“TCP”方式,而且也没有被动识别出目标操作系统? A:端口扫描中的“SYN”方式在NT4或XP+SP2系统下无法使用,在windows 2000等系统...

    X-Scan v3.1

    Q:扫描一个子网,进程里同时出现10个checkhost.exe的进程是什么原因? A:检测每个主机都会单独起一个Checkhost.exe进程,检测完毕会自动退出。并发主机数量可以通过图形界面的设置窗口设定,命令行程序通过“-t...

Global site tag (gtag.js) - Google Analytics