CAE开发日志(5):日志与异常处理机制
来源:互联网 发布:游戏美工学历要求 编辑:程序博客网 时间:2024/06/05 16:10
1、CAE的日志支持
一开始我是想使用java原生的日志(java.util.log)来实现CAE的日志,但是发现java原生的log还是太弱了,灵活性也不足,最重要的是配置写入log文件时的配置查了网上的教程还是没有作用。
后来CAE的日志就改用了log4j来实现,目前配置的log4j一共有两种输出方式,一种是INFO级别以上的日志将会输出到控制台,另一种是WARN级别的日志将会输出到错误文件中。log4j其实也比较坑,网上的教程中有说到可以通过web.xml配置让spring注入一个webroot.key变量,这个变量可以自动获取当前项目在机器上的部署路径,这样log4j.properties里面就不用配置绝对路径了,移植性也更好。我配了,从控制台上也看到了webroot.key已经成功注入到系统中,log4j.properties里面也的确使用了${webroot.key}的引用,可是根本就没注入进去!所以现在的日志路径依然是绝对路径,这个以后可能需要再解决。
2、CAE的异常处理机制
目前CAE是一个业务主要集中在dao层的应用,所以controller层和service层并没有做过多的异常处理,目前一般是针对dao层的异常来进行处理,每个dao层方法的主逻辑一般都会包裹在一个try-catch块中,try块是正常的逻辑,catch块则是出异常的逻辑,一般try块中抛了一个没有预料到的异常会把这个异常链写入到文件中,主要形式的代码框架如下:
try{//正常的业务逻辑} catch(knownException ex){//可预测、已知的异常所做的逻辑//例如“当前歌曲不存在call表”时就会抛出EmptyResultDataAccessException,但这个异常是可预料的、可接受的,所以只要普通info一下就好logger.info();ex.printStackTrace();return null;} catch(Exception ex){//未知的异常,写入错误日志文件Util.logStackTrace(logger, ex.getStackTrace());ex.printStackTrace();return null;}
可以看到,异常这里分为了两类,一类是业务允许范围内的异常,这种异常是可预测、可预知、对系统无害无风险的异常,一般只要info一下,打到控制台即可;另一种是预想之外的异常,对于这种异常,因为有检测到bug甚至是危害系统的风险,所以需要把整个异常链都记录下来,Util.logStackTrack()方法是我封装的一个方法,用于把异常链通过log4j写入文件。
3、日志级别及含义
一般日志系统都会把输出的日志分为多个等级,例如log4j输出的信息严重性从低到高分别是:debug、info、warn、error、fatal(还有其他的一些特殊级别,这里没有用到就不列出了),目前CAE使用到的级别有info、warn、error、fatal,它们分别对应的使用场景是:
info:普通的信息
warn:出现了异常,但是这个异常并不会太影响真正的逻辑,例如每次点进call表详细页对应的歌曲点击量会+1,如果此时这个+1的操作失败了其实并不会太影响后续的操作甚至是系统本身,所以使用warn来记录,这也是会写入文件的
error:出现了异常,这个异常是开发时没有预料到的,一般是程序的bug出现的地方,它用于dao层方法的catch(Exception ex)块中。
fatal:最严重的的错误,这种情况就是在error的基础上,再加上出现异常的类中没有logger对象的情况,这就表示出异常的这个类在开发时“根本不会想到这个类会抛异常”的情况,此时就要使用AOP切面自身的logger来记录这个错误,关于AOP与CAE的日志系统的联系在下一节会提到。
4、AOP——最后一道异常记录防线
目前所有的dao层都有自己的logger,在打印error级别的日志时,dao层并不会自己打印,而是把logger对象和异常对象传给Util工具类,在Util.logStackTrace()方法中统一打印,如果出现了一些没有传给logStackTrace()方法的异常(目前目测是没有的),那么我的AOP异常拦截会把这种最诡异的异常情况以fatal的级别记录下来。
- CAE开发日志(5):日志与异常处理机制
- CAE开发日志(2):搜索功能
- CAE开发日志(3):Condition类
- CAE开发日志(4):SqlWithParams类
- CAE开发日志(6):cae_pdf2html设计
- CAE开发日志(7):动静分离
- 企业级开发中的异常处理与日志
- CAE开发日志(1):后台总体架构
- 【Java开发手册之异常日志(一)】异常处理
- 学习日志—异常处理机制
- MVC3全局异常处理与异常日志
- 异常处理和日志
- 阿里巴巴Java开发手册-异常日志-异常处理
- 没头没尾--项目开发笔记:异常处理与日志记录代码自动生成(工具能生成多少代码!?续一)
- 爱上MVC3系列~全局异常处理与异常日志
- Java开发代码规范之异常日志(一)——异常处理
- php中错误和异常处理的机制三(错误日志)
- 【Java开发手册之异常日志(二)】日志规约
- Java代码优化必须注意的细节
- C语言预处理机制
- 一个不错的线程讲解系列,记录下来以便学习(最近研究多线程以及并发)
- 解决 MUI QQ登陆功能报错“该应用非官方正版应用,请到......100044”
- 字符串遇空格截断
- CAE开发日志(5):日志与异常处理机制
- html基础标签整理
- Servlet文件上传
- 笔记本如何创建wifi:命令提示符创建wifi
- hexo搭建个人博客
- 1022. D进制的A+B (20)
- C/C++中const关键字详解
- CornerStone的使用
- Python 各种运行错误(如:SyntaxError :invalid syntax)