0.2.6 • Published 6 months ago

yog-log v0.2.6

Weekly downloads
101
License
BSD
Repository
github
Last release
6 months ago

Node Log 统计方案


这是什么

这是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 初始化配置

var YLogger = require('yog-log');
var path = require('path');

var conf = {
  app: 'yog', //app名称,产品线或项目名称等
  log_path: path.join(__dirname, 'log'), //日志存放地址
  intLevel: 16 //线上一般填4,参见配置项说明
}

app.use(YLogger(conf));

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

2 调用接口统计应用日志

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

var YLogger = require('yog-log');
var logger = YLogger.getLogger(); //默认通过domain获取,单独使用请传递config
logger.log('warning','msg');//or logger.warning('msg');

日志初始化配置项

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

配置项默认值说明
appunknownapp名称,推荐填写
format见下默认应用日志格式
format_wf见下默认的应用日志warning及fatal日志格式
intLevel16log日志级别,高于此级别的日志不会输出
auto_rotate1是否自动切分
use_sub_dir1日志是否在二级目录打印,目录名为 APP_NAME
log_path插件安装地址/log日志存放目录,注意需要设置
data_path插件安装地址/data格式数据存放的目录,可不用设置
IS_OMP0是否开启omp日志,如果不接入omp,建议置为2
debug0是否使用debug模式直接在控制台输出日志
默认`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打印FATAL
WARNING2打印FATAL和WARNING
NOTICE4打印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.fatal(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字段默认只会在warningfatal日志中展现

生成的错误日志将会类似于下面的格式。其中可以看到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的yogLogger arguments添加参数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]

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

格式配置方法如下:

字段描述
%%百分比字符串
%hname or address of remote-host
%t时间戳,支持自定义格式如%{%d/%b/%Y:%H:%M:%S %Z}t
%iHTTP-header字段
%a客户端IP
%Aserver address
%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等

测试说明

单元测试说明详见此文档

0.2.6

6 months ago

0.2.5

1 year ago

0.2.4

2 years ago

0.2.3

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.2.2

2 years ago

0.1.14

3 years ago

0.1.13

3 years ago

0.1.11

3 years ago

0.1.12

3 years ago

0.1.10

3 years ago

0.1.9

3 years ago

0.1.8

3 years ago

0.1.7

5 years ago

0.1.6

5 years ago

0.1.5

6 years ago

0.1.4

6 years ago

0.1.3

7 years ago

0.1.2

7 years ago

0.1.1

8 years ago

0.1.0

8 years ago

0.0.24

8 years ago

0.0.23

8 years ago

0.0.22

8 years ago

0.0.21

8 years ago

0.0.20

9 years ago

0.0.19

9 years ago

0.0.18

9 years ago

0.0.17

9 years ago

0.0.16

9 years ago

0.0.15

9 years ago

0.0.14

9 years ago

0.0.13

9 years ago

0.0.12

9 years ago

0.0.11

9 years ago

0.0.10

10 years ago

0.0.9

10 years ago

0.0.8

10 years ago

0.0.7

10 years ago

0.0.6

10 years ago

0.0.5

10 years ago

0.0.4

10 years ago

0.0.3

10 years ago

0.0.2

10 years ago

0.0.1

10 years ago