首页 > 解决方案 > 当调试日志传递时,错误日志不会传递到错误日志文件。为什么会这样?

问题描述

我正在尝试使用Winston创建一个简单的记录器类。我创建了两个名为的记录器LoggerError它们从Logger.

默认情况下,Logger该类创建所有日志,al-logs.logError在扩展时Logger添加一个额外的传输以在其中创建所有error日志error-logs.log。但是里面没有创建日志error-logs.log。我错过了什么?

这是我所做的:

首先,我创建了这个Logger类:

  class Logger {
    constructor(serviceName, label = "") {
        this.logger = winston.createLogger({
            level: "debug",
            format: winston.format.combine(
                winston.format.label({ label }),
                winston.format.timestamp(),
                winston.format.json()
            ),
            defaultMeta: {
                service: serviceName
            },
            transports: [
                new winston.transports.File({ filename: 'all-logs.log' })
            ],
            exceptionHandlers: [
                new winston.transports.File({ filename: 'exceptions.log' })
            ]
        });
    }
}

然后我创建了一个Error扩展上述类的Logger类:

class Error extends Logger {
    constructor(serviceName, label = "") {
        super(serviceName, label);
        this.logger.level = "error";
        this.logger.transports.push(new winston.transports.File({ filename: 'error-logs.log', level: this.logger.level }))
    }
}

然后我创建了一个名为console.error

const errorLogger = new Error("test-service");


console.error = (...args) => {
    errorLogger.logger.error(args.join(" "))
}

现在,如果我这样做:

console.error("some error")

它不会被记录到error-logs.log文件中,而只是被记录到all-logs.logLogger中。为什么没有任何东西被记录到error-logs.log文件中?

标签: javascriptnode.jslogginges6-classwinston

解决方案


推荐阅读