首页 > 解决方案 > 如何为 winston@3 记录器制作自定义 json 格式化程序?

问题描述

我正在尝试为 winston v3 制作自定义 json 格式化程序。

这是一个带有演示的文件:

const { createLogger, format, transports } = require("winston")
const { combine, timestamp, prettyPrint } = format

const logger = createLogger({
  format: combine(timestamp(), prettyPrint())
})

logger.add(new transports.Console())

logger.info("test message", { data: { a: 1, b: [1, 2, 3, 4], d: new Date() } })

try {
  throw new Error("I'm an error!")
} catch (err) {
  logger.error(err)
}

它打印:

{ data: { a: 1, b: [ 1, 2, 3, 4 ], d: 2018-07-21T08:59:27.958Z },
  level: 'info',
  message: 'test message',
  timestamp: '2018-07-21T08:59:27.959Z',
  [Symbol(level)]: 'info',
  [Symbol(splat)]:
   [ { data: { a: 1, b: [ 1, 2, 3, 4 ], d: 2018-07-21T08:59:27.958Z } } ] }
{ Error: I'm an error!
    at Object.<anonymous> (/Users/max7z/projects/test/t32__test__winston__pretty-print_symbol/index.js:13:9)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
    at startup (internal/bootstrap/node.js:266:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:596:3)
  level: 'error',
  timestamp: '2018-07-21T08:59:27.962Z',
  [Symbol(level)]: 'error' }

我想要几乎相同的输出,但没有一些字段:[Symbol(level)]、[Symbol(splat)]。

是否可以从prettyPrint格式化程序中删除 [Symbol] 字段?

或者我怎样才能制作我自己的自定义 json 格式化程序,并带有像 prettyPrint 这样的错误堆栈跟踪?

标签: node.jsloggingwinston

解决方案


查看如何创建自定义格式。然后以 的源代码prettyPrint基础,根据您的需要创建修改后的版本。

Winstons 使用triple-beam各种Symbols 的定义,因此您也可以使用该包来删除它们。


推荐阅读