代码中“抛异常”与“记录log"的思考
来源:互联网 发布:淘宝双十一数据分析 编辑:程序博客网 时间:2024/05/16 07:03
今天遇到一个关于异常的问题,记录下来关于什么时候该抛异常,什么时候应该记录log,和log中warning, notice, error的适用场合
一般来说程序遇到的问题分为硬错误和软异常。
所谓硬错误,就是代码进行不下去了,这是应该中止,这时会抛出一个异常,中断代码的进行,如下:
if ($this->client->write($message) === false) { logger::log('write error', logger::error); throw new client_exception('cannot write to server'); }对于client与server进行通信的情况,抛异常一般有这么几种情况:
1 client 与 server 建立连接时失败
2 read 或 write 时socket断开了
3 通信协议出现错误:比如我们规定server应该首先会返回给我们一个"OK",然后是协议内容,如果client收到的不是OK,那么这就是一种协议错误
4 返回其他信息,这里这个其他指的是我们规定的一些返回信息,比如 -1,-100之类的,出现的场景是当client链接server1,server1有链接server2获取相关信息,但是server1与server2之间的通信出现了错误了,那么server1返回给client一个-100表示出错了,这时client应该捕获到这个错误,然后抛出一个异常,告诉用户现在系统忙
发生以上这些错误时,我们要抛异常,同时在log中使用error这一级别
对于,不影响程序按照预定流程继续进行的错误,应该记录log并使用warning这一级别,比如我们client链接后端的集群服务器,一台一台的尝试,在尝试的过程中发现某一台server无法链接时,应当记录一个warning到log中,如果所有的server都挂掉了,那么这就应该抛异常,并记录error级别的log了。
看一个例子:何时记录warning 的log和抛异常,另外在重要的地方记录notice到log中也很重要:
public function __construct($account){ $this->account = $account; logger::log('connecting to server...', logger::notice); $all_attempts_failed = true; foreach (self::$servers as $server) { list($host, $port, $timeout) = explode(':', $server); $client = new tcp_socket($timeout, $timeout); if ($client->connect($host, $port)) { $all_attempts_failed = false; $this->client = $client; break; } else { logger::log('cannot connect to server: ' . $server, logger::warning); } } if ($all_attempts_failed) { $msg = 'all attempts failed to connect to server!'; logger::log($msg, logger::error); throw new client_exception($msg); } logger::log('connected to server.', logger::notice); }
- 代码中“抛异常”与“记录log"的思考
- 记录log的好代码
- 思考记录--错误状态、异常抛出与接口耦合度的关系
- android-code-程序异常处理与记录log
- nginx的log中记录协议类型
- java异常的思考与学习心得
- PHP字符串处理的思考与记录
- 关于Java抛出异常与处理异常的思考
- [caffe代码] LOG(xxx)日志记录的窥探
- Android 抓取异常Log与节点Log并保存到SD卡中
- 防止代码变质的思考与方法
- 防止代码变质的思考与方法
- 防止代码变质的思考与方法
- 防止代码变质的思考与方法
- 防止代码变质的思考与方法
- 防止代码变质的思考与方法
- 防止代码变质的思考与方法
- 防止代码变质的思考与方法
- - 屏蔽网页右鍵,适用于IE6,IE7,IE8,FireFox,谷歌Chrome浏览器
- 禁止显示Apache目录列表-Indexes FollowSymLinks
- mssql 设置自增字段的起始值
- 白岩松:平静才是真正的奢侈品。
- DIV滚动条样式大全
- 代码中“抛异常”与“记录log"的思考
- exe中获得资源字符串
- 数据库的聚集
- FL2440无操作系统应用程序编写测试008——TOUCH SCREEN
- SQL触发器(AFTER和INSTEAD OF)
- hashmap,hashtabl,hashtree,linkedhashmap区别分析
- C#转义字符
- web app 待整理
- memset ,memcpy 和strcpy 的根本区别