简体   繁体   English

使用winston节点记录器记录日期和时间格式的json

[英]log json with date and time format with winston node logger

I am trying to log json with winston that includes a timestamp, I have the following configuration: 我试图用包含时间戳的winston记录json,我有以下配置:

'use strict';

import * as winston from 'winston';

const LOG = !!process.env.LOG;

export const { error, info, debug } = winston.createLogger({
  transports: [new winston.transports.Console()],
  silent: process.env.NODE_ENV === 'test' && !LOG,
  format: winston.format.combine(
    winston.format.timestamp({
      format: 'YYYY-MM-DD HH:mm:ss'
    }),
    winston.format.colorize({ all: true }),
    winston.format.simple()
  )
});

But it is logging messages like this: 但它正在记录这样的消息:

info: connecting /closebanner {"timestamp":"2018-08-22 22:09:35"}

Only the timestamp is in json format and not the message. 只有时间戳是json格式而不是消息。

You can use winston json formatter: 你可以使用winston json formatter:

const { createLogger, format, transports } = require('winston');
const { combine, timestamp, json } = format;

const logger = createLogger({
  format: combine(
    timestamp({
      format: 'YYYY-MM-DD HH:mm:ss'
    }),
    json(),
  ),
  transports: [new transports.Console()]
})

So for example: 例如:

app.get('/', (req, res) => {
  logger.info('request came');
  logger.error({ "errorMessage": "something went wrong " })
  return res.status(500).end();
})

app.listen(8080, () => {
  logger.info('app started')
})

When You request localhost:8080 using GET HTTP method, it will result in: 当您使用GET HTTP方法请求localhost:8080 ,将导致:

{"message":"app started","level":"info","timestamp":"2018-08-23 00:56:48"}
{"message":"request came","level":"info","timestamp":"2018-08-23 00:56:54"}
{"message":{"errorMessage":"something went wrong"},"level":"error","timestamp":"2018-08-23 00:56:54"}

Please note that: 请注意:

  • colorize will not work with JSON - check github discussion colorize不适用于JSON - 检查github讨论
  • simple is not needed since it is just type of logform - string literal and You wanted to use JSON here doc 简单是不需要的,因为它只是logform的类型 - 字符串文字,你想在这里使用JSON doc

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM