写程序时如何使用日志
2015-11-19 15:17
267 查看
本文来自于朋友tzz的日常编程心得。
日志分级
6个日志等级:TRACE/DEBUG/INFO/WARNING/ERROR/FATAL为了更好的使用日志系统,需要清楚的知道每个日志级别的功能定位和特点。
默认输出标准:
终端:DEBUG(含DEBUG)级别以上日志会被实时输出到终端(标准输出)。
默认情况下,TRACE不打印到终端。
文件:INFO(含INFO)级别以上日志会被归档到日志文件。
默认情况下,TRACE和DEBUG均不记入日志文件。
TRACE
TACE的主要使用目的是在线调试。
该级别日志,默认情况下,既不打印到终端也不输出到文件。此时,对程序运行效率几乎不产生影响。
在程序运行过程中,如果需要查看TRACE级别日志,需要通过elog命令开启TRACE或者将程序日志输出级别降至TRACE。
.
DEBUG
DEUG的主要使用目的是终端查看和在线调试。
该级别日志,默认情况下会打印到终端输出,但是不会归档到日志文件。因此,一般用于开发者在程序当前启动窗口上,查看日志流水信息。
在程序启动命令行中加入 “-nostdout” ,将关闭所有前端打印输出(主要针对DEBUG级别日志)。
.
INFO
INFO的主要使用目的报告程序进度和转态信息。一般这种信息都是一过性的,不会大量反复输出。例如:连接商用库成功后,可以打印一条连库成功的信息,便于跟踪程序进展信息。
该级别日志,默认情况下会同时打印到终端和归档到日志文件(下同)。
.
WARNING
警告信息,表明程序处理中遇到非法数据或者某种可能的错误,该错误是一过性的、可恢复的,不会影响程序继续运行,程序仍处在正常状态。
.
ERROR
该错误发生后程序仍然可以运行,但是极有可能运行在某种非正常的状态下,导致无法完成全部既定的功能。
.
FATAL
致命的错误,表明程序遇到了致命的错误,必须马上终止运行。
日志输出注意事项
1.规范错误码函数返回值:
函数返回值尽量作为错误码标识,不建议返回出参,如用于对象指针、记录条数等信息的输出。除带有是否判断意义的函数外,应采用int类型表示错误码,不建议采用bool类型。
正确情况:
返回码必须为0 值
错误情况:
返回码必须为 小于0 值,建议对于典型错误进行编码(而不是一律-1)。
对于错误情况,要记录相关日志。
.
2.如何选择日志级别
考虑因素:1)输出频率 2)严重级别
输出频率
对于高频输出的日志,一定要用log_trace,否则严重影响程序执行效率、日志文件很快就会被打满和覆盖。因此,For、while循环中的日志,一定要用log_trace()
严重级别
执行错误:必须采用log_warn()以上级别输出。
非执行错误信息: 如调试、追踪等日志信息,一定采用log_info以下级别打印,建议采用log_trace或者log_debug。
log_info只适用于输出频率不高的情况或者需要记录到日志文件中,便于问题追忆的需求。
.
3.哪些信息需要记日志
1)异常、错误信息
2)调试、追踪信息,具体包括:
函数入参:与其他模块交互的程序(接口函数),最好采用log_debug记录“输入参数”信息,便于问题分析。
执行步骤:对于关键功能函数,应该划分执行步骤,在每一步成功执行后,采用log_trace/log_debug记录,便于跟踪和掌控程序当前执行情况。
数据流:例如scada从fes接收到的采集数据相关信息。
.
4.日志信息应该包含哪些信息
对于错误、异常情况,应尽量记录尽可能多的“上下文环境”信息.
如果是函数调用失败,日志中必须包含返回值信息、以及函数调用的相关参数信息。
任何程序在返回错误码前,一定要通过日志记录具体的错误原因,并给出尽量多的场景信息。
.
举例:一条典型的失败的日志记录:
int retCode = obj.func(para1,para2);
if(retCode < 0)
{
log_error(“obj func error.”);
return retCode;
}
相关文章推荐
- STM32 学习总结4 --- 编码器 旋钮式 增量编码器
- 安装pandas
- CSS设置DIV背景色渐变显示
- Netty:Bootstrap的handler和childHandler
- monetdb在windows下的使用
- vim使用笔记
- Android SwipeRefreshLayout控件
- 根据经纬度计算两点之间的距离
- 用户View,五大布局
- 程序最后一个Activity按返回键吐司提示“再按一次退出!”
- How to merge grid cells
- Java中的getGenericSuperclass方法的基本用法
- 对象统计信息锁定的解决办法(ORA-20005/ORA-38029)
- Xcode常用插件 《复制品》
- 嵌入式书籍推荐
- python3.5-ssh免输入密码过程
- 本地文件备份脚本
- foxtable使用笔记
- android 博客园
- 转git取消commit