【问题标题】:Winston logging file name to a transportWinston 将文件名记录到传输中
【发布时间】:2018-12-16 19:46:46
【问题描述】:

我有以下记录器模块:

const { createLogger, format, transports } = require('winston');
const { combine, timestamp, label, printf, colorize } = format;
const logger = require('winston');
const { red } = require('colors')
const myFormat = printf(info => {
    return `${info.timestamp} [${info.label}] ${info.level}: 
      ${info.message}`;
      });

module.exports = logger.createLogger({
level: 'silly',
format: combine(
    label({ label: 'mylogger1' }),
    timestamp(),
    myFormat,
    //logger.format.json(),
  ),
transports: [
  new logger.transports.File({ filename: 'error.log', level: 'error' }),
  new logger.transports.Console({
    format: combine(
        myFormat
     )}
   )
 ]
});

然后我在另一个文件中使用它:

const myLogger = require('./loggermodule');

myLogger.log("verbose","an error occurred in this file: " + 
  module.filename);

如您所见,我正在使用 module.filename 来记录发生日志的文件的名称。

我想知道是否有更好的方法来达到相同的结果

【问题讨论】:

    标签: javascript node.js winston


    【解决方案1】:

    通常,当抛出错误时,文件名会在堆栈跟踪中指定:

    try {
    
    } catch (e) {
        logger.error(e.stack); // log stack
    }
    

    但是如果你需要自己指定文件名,你可以创建一个像这样的包装函数:

    /// const winston = require('winston');
    const logger = winston.createLogger({
        // ...
    });
    
    logger.prototype.logFilename = function (level, filename, message = "") {
        logger.log(level, "An error occurred in this file", filename, message);
    }
    
    module.exports = logger;
    

    然后:

    const myLogger = require('./loggermodule');
    
    myLogger.logFilename("verbose", module.filename);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-26
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 2021-10-10
      • 2019-11-02
      相关资源
      最近更新 更多