egg-json-logger

2.0.8 • Public • Published

egg-json-logger

NPM version npm download

JSON 化输出logger, 使用 阿里云日志服务 => LogStore => 采集日志 => 文本格式日志 => JSON模式

Install

$ npm i egg-json-logger --save

Usage

// {app_root}/config/plugin.js
exports.logger = {
  enable: true,
  package: 'egg-json-logger',
};
//由于暂时无法 在插件扩展的 extend.js 里覆盖egg内置extend的属性(logger),
//只能具体服务里的extend.js里覆盖
// {app_root}/app/extend/context.js
module.exports = {
  get logger() {
    return this.jsonLogger
  },

  get coreLogger() {
    return this.jsonLogger
  }
 }

controller/service

this.logger = ctx.logger + 文件pathName + ctx.meta(reqid/uid/use)
this.logger.info('日志的关键字', '日志的内容1', '日志的内容2'...)

middleware

ctx.logger.info('[middlewave.中间件文件名称]', '日志的关键字', '日志的内容1', '日志的内容2'...)

model/app.js

app.logger.info('[middlewave.中间件文件名称]', '日志的关键字', '日志的内容1', '日志的内容2'...)
app.logger.info('[model.模型文件名称]', '日志的关键字', '日志的内容1', '日志的内容2'...)
app.logger.info('[任何from]', '日志的关键字', '日志的内容1', '日志的内容2'...)

Configuration

// {app_root}/config/config.default.js
exports.logger = {
 
  // 在 已有的 logger 扩展配置参数,以下是默认的扩展参数
  // 忽略 request/reponse 日志的路由, 用于过滤存活检测/静态资源等路由, 支持字符和正则
  ingore: ['/', /.+\.{html|css|js}/],
 
  //以下两个参数必须至少有一个为 true
  //是否输入扁平化JSON的日志, 默认不输出
  flattenr: false,
  //是否序列化输出,默认输出
  stringify: true,
 
  event: {
    // 是否输出 request/reponse/error 事件日志
    request: true,
    response: true,
    error: true,
  },
 
  //错误日志钉钉报警token数组
  dingtalk: [],
 
  // 错误日志企业微信报警 key 数组
  wechatWork: [],
};

Description

  • 基于egg内置的logger, 二次封装,JSON化输出logger
  • 内置了 date, level ,pid,hostname 常规信息
  • 内置了 from 字段,标识日志从哪个 第三方模块/controller文件的方法/service文件的方法输出的日志,middleware/model需要手动在第一个参数中输出
  • 内置了 reqid 字段,串联某一次请求的所有日志
  • 格式化 request/response/error 事件信息打印,这两种日志比普通日志多了 ip/method/origin/path/url等信息 和 query/params/body信息(如果有的话)
  • 日志落盘时对内容都做了 扁平化处理 + 序列化处理
  • 渲染页面返回时,提取 html 内容 里面第一个 json 对象 赋值到 response ,方便排查
  • 增加错误日志报警到钉钉群

Example

请求 GET http://127.0.0.1:7001/index/123?key=123

//request event log
{
    level: 'INFO',
    date: '2018-08-08 16:00:43',
    pid: 6535,
    hostname: 'MokdeMacBook-Pro.local',
    from: 'request',
    //请求贯穿整条线
    reqid: '403229b7-84f0-454d-a906-a09992ea6ada',
    ip: '127.0.0.1',
    origin: 'http://127.0.0.1:7001',
    host: '127.0.0.1:7001',
    method: 'GET',
    path: '/index/123',
    url: '/index/123?key=123',
    //三种参数位置都会打印
    body: {},
    query: { key: '123' },
    params: {},
    //有内容的会被展开
    'query.key': '123'
}
//controller/service log
this.logger.info('massage', {obj: 123}, [{arroy: 123}])
{
    level: 'INFO',
    date: '2018-08-08 16:00:43',
    pid: 6535,
    hostname: 'MokdeMacBook-Pro.local',
    from: 'controller.home',
    log1: 'massage',

    //string化的 和 扁平化的对象形式
    log2: { obj: 123 },
    'log2.obj': 123,

    log3: [ { arroy: 123 } ],
    'log3.0.arroy': 123,
    reqid: '403229b7-84f0-454d-a906-a09992ea6ada',
    uid: '',
    use: 8
}
{
    level: 'DEBUG',
    date: '2018-08-08 16:00:43',
    pid: 6535,
    hostname: 'MokdeMacBook-Pro.local',
    from: 'controller.home',
    log1: 'massage',
    'log2.obj': 123,
    log2: { obj: 123 },
    'log3.0.arroy': 123,
    log3: [ { arroy: 123 } ],
    reqid: '403229b7-84f0-454d-a906-a09992ea6ada',
    uid: '',
    use: 8
}
//error event log
{
    "level": "ERROR",
    "date": "2018-08-13 18:50:11",
    "pid": 6629,
    "hostname": "MokdeMacBook-Pro.local",
    "from": "error",
    "reqid": "a24c82dd-b58b-4652-ad70-395598e773d9",
    "ip": "127.0.0.1",
    "origin": "http://127.0.0.1:7001",
    "host": "127.0.0.1:7001",
    "method": "GET",
    "path": "/index/123",
    "url": "/index/123?key=123",
    "body": {},
    "query": {"key": "123"},
    "params": {"abc": "123"},
    "error": {
      "name": "Error",
      "message": "ReferenceError: hi is not defined",
      "stack": "Error ReferenceError hi is not defined at getErrorJson (/Users/mok/Desktop/x-standard/node_modules/egg-json-logger/lib/util.js 33 13) at Application.app.on (/Users/mok/Desktop/x-standard/node_modules/egg-json-logger/app.js 29 20) at emitTwo (events.js 131 20) at Application.emit (events.js 214 7) at /Users/mok/Desktop/x-standard/node_modules/egg-ecarx-interface/app/middleware/interface.js 29 17 at _combinedTickCallback (internal/process/next_tick.js 131 7) at process._tickCallback (internal/process/next_tick.js 180 9)"
    },
    "query.key": "123",
    "params.abc": "123",
    "error.name": "Error",
    "error.message": "ReferenceError: hi is not defined",
    "error.stack": "Error ReferenceError hi is not defined at getErrorJson (/Users/mok/Desktop/x-standard/node_modules/egg-json-logger/lib/util.js 33 13) at Application.app.on (/Users/mok/Desktop/x-standard/node_modules/egg-json-logger/app.js 29 20) at emitTwo (events.js 131 20) at Application.emit (events.js 214 7) at /Users/mok/Desktop/x-standard/node_modules/egg-ecarx-interface/app/middleware/interface.js 29 17 at _combinedTickCallback (internal/process/next_tick.js 131 7) at process._tickCallback (internal/process/next_tick.js 180 9)"
}

// response event log
{
    level: 'WARN',
    date: '2018-08-08 16:00:43',
    pid: 6535,
    hostname: 'MokdeMacBook-Pro.local',
    from: 'response',
    reqid: '403229b7-84f0-454d-a906-a09992ea6ada',
    uid: '',
    use: 15,
    ip: '127.0.0.1',
    host: '127.0.0.1:7001',
    origin: 'http://127.0.0.1:7001',
    method: 'GET',
    path: '/index/123',
    url: '/index/123?key=123',
    body: {},
    query: { key: '123' },
    params: { abc: '123' },
    'query.key': '123',
    'params.abc': '123',
    response: {
       success: false,
       code: 500,
       message: 'hi is not defined',
       data: ''
    }
    'response.success': false,
    'response.code': 500,
    'response.message': 'hi is not defined',
    'response.data': ''
}

Package Sidebar

Install

npm i egg-json-logger

Weekly Downloads

3

Version

2.0.8

License

MIT

Unpacked Size

19.1 kB

Total Files

7

Last publish

Collaborators

  • hdumok