写程序时如何使用日志

原创 2015年11月19日 15:17:57

本文来自于朋友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;
}

版权声明:本文为博主原创文章,转载请注明【转载自皓月如我的CSDN博客】,并贴出原始链接地址。

程序那些事:日志记录的作用和方法----如何在程序中记录日志

转载地址:http://www.infoq.com/cn/articles/why-and-how-log     程序中记录日志一般有两个目的:Troubleshooting(故障定位)和显示程序运...

让你提前认识软件开发(15):程序调试的利器—日志

第1部分 重新认识C语言 程序调试的利器—日志           如果世界上有一个人能够保证一次写出来的代码是百分之百正确的,那么毫无疑问,他一定是世界上最优秀的程序员,没有之一。为什么要求代码写好...
  • zhouzxi
  • zhouzxi
  • 2014年04月24日 08:22
  • 4342

Log日志框架的学习.正确使用日志的10个技巧

1)选择正确的Log开源框架          在代码中为了知道程序的行为的状态, 我们一般会打印一条日志: log.info("Happy and carefree logging")...
  • feir23
  • feir23
  • 2016年05月24日 09:58
  • 3379

浅谈LOG日志的写法

文章来源于公司的大牛 1 Log的用途 不管是使用何种编程语言,日志输出几乎无处不再。总结起来,日志大致有以下几种用途: l  问题追踪:通过日志不仅仅包括我们程序的一些bug,也可以在安装配置...

*log日志输出用处用法等

干了这么多年,今天被技术总监又教育了 日志问题: log日志输出用处 log.info(); 用来交给运维人员统计数据或者长时间保留数据所用 log.error(); 用来...

java项目中添加日志

1.pom.xml引入 com.zhkj.path log4j 1.2.15 commons-logging commons-logging 1.1.1 2. 在...

正确使用日志的10个技巧

做一个苦逼的Java攻城师, 我们除了关心系统的架构这种high level的问题, 还需要了解一些语言的陷阱, 异常的处理, 以及日志的输出, 这些"鸡毛蒜皮"的细节. 这篇文章是JCP成员, To...

程序那些事:日志记录的作用和方法----如何在程序中记录日志

转载地址:http://www.infoq.com/cn/articles/why-and-how-log     程序中记录日志一般有两个目的:Troubleshooting(故障定位)和显示程序运...

snk 与pfx

  snk 1用来证明这个生成的程序集是你发布的; 2如果你写的程序集要用在多个应用程序上的话,那么这个程序集必须要拥有唯一的名称,这个强名称是程序集唯一名称的一部分。   3只要你保护好你的snk文...

使用CFile类写日志文件的一个程序

  • 2014年04月02日 09:52
  • 1.79MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:写程序时如何使用日志
举报原因:
原因补充:

(最多只允许输入30个字)