关闭

写程序时如何使用日志

标签: 编程
4246人阅读 评论(0) 收藏 举报
分类:

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

5
0
查看评论

js 写程序日志代码

function WrileLog(sWrite) { var fso,tf; fso = new ActiveXObject("Scripting.FileSystemObject");//获取对象 tf = fso.OpenTextFile("c:\\log....
  • lz465350
  • lz465350
  • 2014-11-26 11:04
  • 1139

浅谈LOG日志的写法

文章来源于公司的大牛 1 Log的用途 不管是使用何种编程语言,日志输出几乎无处不再。总结起来,日志大致有以下几种用途: l  问题追踪:通过日志不仅仅包括我们程序的一些bug,也可以在安装配置时,通过日志可以发现问题。 l  状态监控:通过实时分析日志,可以监控系统的运...
  • xiangnideshen
  • xiangnideshen
  • 2015-05-21 17:27
  • 23545

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

转载地址:http://www.infoq.com/cn/articles/why-and-how-log     程序中记录日志一般有两个目的:Troubleshooting(故障定位)和显示程序运行状态。好的日志记录方式可以提供我们足够多定位问题的依据。日志记录大家...
  • bingliquhuo
  • bingliquhuo
  • 2014-03-12 10:14
  • 4304

openCV学习日志(一)

一、openCV环境的安装 首先要纠正一些初学者的误区,openCV是一个跨平台的计算机视觉库,包含各种计算机视觉相关的库函数和数据结构,但是不包含编译器!也就是说,openCV只是一个SDK,基于openCV的程序开发是要依托C++的编译环境的。因此,在安装openCV包之前,请确保你的电脑已经安...
  • qq_28955085
  • qq_28955085
  • 2017-07-13 10:38
  • 92

如何打印日志

一、配置php配置文件 1.error_reporting = E_ALL 2.display_errors = Off 3.log_errors = On 4.log_errors_max_len = 102409 5.error_log = /usr/local/error.log 配置完成,重...
  • qq_28423997
  • qq_28423997
  • 2017-05-02 21:47
  • 195

开发怎么写Log

1. 一个最基本的例子 使用Logging框架写Log基本上就三个步骤 引入loggerg类和logger工厂类声明logger记录日志 下面看一个例子 //1. 引入slf4j接口的Logger和LoggerFactory import org...
  • fayeyiwang
  • fayeyiwang
  • 2016-03-31 13:40
  • 757

C# 写程序日志 log文件

最近项目上,做了一个比较
  • dubuzherui
  • dubuzherui
  • 2014-10-27 17:04
  • 4828

我的第一篇编程日志——初始化问题

一直没有意识
  • u012965256
  • u012965256
  • 2014-06-02 15:11
  • 841

java项目中添加日志

1.pom.xml引入 com.zhkj.path log4j 1.2.15 commons-logging commons-logging 1.1.1 2. 在src下新建log4j.properties文件,类容如(详细配置:http://www.cnblo...
  • rrz634171
  • rrz634171
  • 2016-03-15 14:50
  • 4189

正确使用日志的10个技巧

做一个苦逼的Java攻城师, 我们除了关心系统的架构这种high level的问题, 还需要了解一些语言的陷阱, 异常的处理, 以及日志的输出, 这些"鸡毛蒜皮"的细节. 这篇文章是JCP成员, Tomasz Nurkiewicz( http://nurkiewicz.blogs...
  • kobejayandy
  • kobejayandy
  • 2013-12-15 16:41
  • 4101
    个人资料
    • 访问:1128327次
    • 积分:12165
    • 等级:
    • 排名:第1441名
    • 原创:206篇
    • 转载:139篇
    • 译文:3篇
    • 评论:180条
    博客专栏