yog-log Node Log 统计方案开源项目

我要开发同款
匿名用户2014年07月28日
40阅读
开发技术JavaScript
所属分类程序开发、日志工具(Logging)
授权协议未知

作品详情

yog-log是NodeLog统计方案,是yog框架的log统计模块,支持中间件或者单独使用等方式,兼容ODP日志格式与配置。关于ODP的日志方案调研可查看此文档.

统计日志类型包括:

server日志

access_log:web访问日志,按小时分日志

error_log:web错误日志,按小时分日志

访问日志统计方式为请求返还才触发。

应用日志

每个app有各自独立的日志,日志名为app的名称,例如demo.log和demo.log.wf。

可配置每个app是否使用独立的子目录存放自身日志,例如demo/demo.log。

可配置每个app是否按小时切分日志。

可配置每个app的日志级别。

对于不属于任何app的node.js程序,日志名为unknown.log。

快速开始1在yog的config.json中添加此配置  "yogLogger": {            "enabled": true,            "priority": 50,            "module": {                "name": "yog-log",                "arguments": [                    {                        "level" : 16, //线上一般填4,参见配置项说明                        "app": "app_name", //app名称,产品线或项目名称等                        "log_path": "path:./data/log"//日志存放地址                    }             ]      } }

填写此配置之后yog-log就开始统计访问日志。

2调用接口统计应用日志

router层统计日志

router层推荐使用emit方式触发log事件,避免在每个文件中都requireyog-log

try{    //do something}catch(e){    res.emit('log',{'stack':e,'errno':120,'msg' :'error happened!'}, 'warning'); //推荐方式    //or res.emit('log',{'stack':e});//日志等级不写默认为notice    //or res.emit('log','error!');//只写字符串不会解析错误堆栈}

model等没有res的地方

使用getLogger方法获取到日志模块实例,然后调用接口统计日志。

var YLogger = require('yog-log');var logger = YLogger.getLogger(); //默认通过domain获取,单独使用请传递configlogger.log('warning','msg');//or logger.warning('msg');日志初始化配置项

配置项均有默认值,理论上不需要配置也能工作。推荐设置配置有:level、app、log_path三项。

配置项默认值说明appunknownapp名称,推荐填写format见下默认应用日志格式format_wf见下默认的应用日志warning及fatal日志格式level16log日志级别,高于此级别的日志不会输出auto_rotate1是否自动切分use_sub_dir1日志是否在二级目录打印,目录名为APP_NAMElog_path插件安装地址/log日志存放目录,注意需要设置data_path插件安装地址/data格式数据存放的目录,可不用设置is_omp0是否开启omp日志,如果不接入omp,建议置为2debug0是否开启omp日志,如果不接入omp,建议置为2默认`format`:%L: %t [%f:%N] errno[%E] logId[%l] uri[%U] user[%u] refer[%{referer}i] cookie[%{cookie}i] %S %M默认的`format_wf `:%L: %{%m-%d %H:%M:%S}t %{app}x * %{pid}x [logid=%l filename=%f lineno=%N errno=%{err_no}x %{encoded_str_array}x errmsg=%{u_err_msg}x]应用日志等级日志等级数据编号统计说明FATAL1打印FATALWARNING2打印FATAL和WARNINGNOTICE4打印FATAL、WARNING、NOTICE(线上程序正常运行时的配置)TRACE8打印FATAL、WARNING、NOTICE、TRACE(线上程序异常时使用该配置)DEBUG16打印FATAL、WARNING、NOTICE、TRACE、DEBUG(测试环境配response.emit(name,obj,level)

在router层使用emit方式可以避免每个文件都引入logger和获取实例。参数说明:

name:日志事件名称,固定为'log'

obj:string或者object格式。如果是string,认为是错误消息。如果是object,请认为是详细信息。正确格式为{'stack':e,'msg':'msg','errno':'010'},分别代表错误堆栈、错误消息、错误码。错误消息如果不填将使用错误堆栈的消息。

level:日志等级字符串,见上。不区分大小写,不写默认为notice

如下所示:

res.emit('log',{'stack':e,'errno':120,'msg' :'error happened!'},'warning');getLogger(config)

当框架接收请求时,yog-log会新建一个实例,并保存到domain中,确保单次请求流程中调用的getLogger获取到的是同一个实例。

如果单独使用log不经过请求,getLogger会新建一个实例,此时应当传递config配置参数。

log(level,obj)

提供统一的log方法打印日志。参数说明同response.emit。另外针对各个应用日志等级提供了相对应的方法。

请确保使用快捷方法时名称准确,否则程序将报错。

fatal : logger.fata(obj)

warning:logger.warning(obj)

notice:logger.notice(obj)

trace:logger.trace(obj)

debug:logger.debug(obj)

注意:logger为通过getLogger获取到的日志模块实例。

自定义错误消息

如果想在日志中填写自定义的日志字段用于追查错误,请在obj中加入custom对象,然后按照键值对应放在custom中。如下所示:

 //router层 res.emit('log',{   'stack':e, //错误堆栈   'errno':120,  //错误码   'msg' :'error happened!',  //错误消息   'custom':{'key1' :'value1','key2':'value2'} //自定义消息 });  //其他地方 logger.log('warning', {   'stack':e, //错误堆栈   'errno':120,  //错误码   'msg' :'error happened!',  //错误消息   'custom':{'key1' :'value1','key2':'value2'} //自定义消息 });

注意custom字段默认只会在warning和fatal日志中展现

生成的错误日志将会类似于下面的格式。其中可以看到custom字段已自动添加到日志中:

WARNING: 07-03 16:44:55 yd * - [logid=868855481 filename=D:\fis\test\models\doc.js lineno=25 errno=120 key1=value1 key2=value2 errmsg=error%20happened!]Debug支持

处于debug模式下Log将在控制台输出错误日志,并根据错误日志类型显示不同的颜色,方便开发人员调试(debug模式下依旧会写日志到文件)。有两种方法开启debug模式:

开发时:yog的config.json的yogLoggerarguments添加参数debug:1即开启debug模式

线上:无论在线上还是线下都可以在url中添加query参数_node_debug=1开启debug模式

日志格式配置

yog-log兼容ODP支持灵活的日志格式配置,以满足不同系统对日志的格式要求。如接入OMP时warning日志格式配置:

%L: %{%m-%d %H:%M:%S}t %{app}x * %{pid}x [logid=%l filename=%f lineno=%N errno=%{err_no}x %{encoded_str_array}x errmsg=%{u_err_msg}x]

除非特殊情况,不建议随意修改日志格式配置。

格式配置方法如下:

字段描述%%百分比字符串%hnameoraddressofremote-host%t时间戳,支持自定义格式如%{%d/%b/%Y:%H:%M:%S%Z}t%iHTTP-header字段%a客户端IP%Aserveraddress%C单个或全部cookie%D请求消耗时间/ms%f物理文件名称%H请求协议%m请求方法%p服务端端口%q请求query%U请求URL%vHOSTNAME%VHTTP_HOST%L当前日志等级%N错误发生行数%E错误码%lLogID%M错误消息%x内置的自定义数据,有pid、cookie、encoded_str_array等测试说明

单元测试说明详见此文档

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论