首页 > 解决方案 > 温斯顿计时器不打印时间

问题描述

我正在运行 winston 计时器文档中给出的这个示例 -

const winston = require('winston');

const logger = winston.createLogger({
  level: 'silly',
  format: winston.format.simple(),
});

logger.add(new winston.transports.Console({
    format: winston.format.simple(),
}));

require('winston-timer')(logger, {"useColors":false});
logger.start_log('something', 'silly');
logger.stop_log('something', 'silly');

在输出中我应该看到时间,但我看到的是这个 -

nodejstutorials % node winstontimerbasic.js
silly: Starting timer "something"
silly: Finished timer "something" in 

我没有在输出中看到经过的时间。我不确定在浏览文档时我遗漏了什么。请帮忙。

标签: node.jsloggingwinston

解决方案


如果你想使用时间戳选项,你应该在创建 winston 实例时说。

用这个改变你的winston导入:

const winston, { format } = require('winston');

从格式中解构所需的属性:

const { combine, timestamp, printf } = format;

在创建 winston 实例时创建自定义打印选项:

const logger = winston.createLogger({
    level: "error",
    format: combine(
        format.errors({ stack: true }), // log the full stack
        timestamp(), // get the time stamp part of the full log message
        printf(({ level, message, timestamp, stack }) => {
            // formating the log outcome to show/store
            return `${level === "error" ? "❌" : "✅"} ${level}: ${message} ${
                level === "error" ? "|  " + timestamp.substring(0, 19) : ""
            }   ${"\n"} ${level === "error" ? stack : ""}`;
        }),
        format.metadata() // >>>> ADD THIS LINE TO STORE the ERR OBJECT IN META field
    ),
    transports: [
        new winston.transports.Console({ level: "info" }),
        new winston.transports.File({ filename: "logs.log", level: "info" }),
    ],
});

这将为您的 winston 记录器创建一个自定义 printf 选项。你可以导出它,你喜欢它:

logger.error(error)
logger.info("this is an info")

当然,您可以根据自己的喜好定制 printf 选项手风琴


推荐阅读