📜  winston logger 为每个级别创建特定的日志文件 - Javascript (1)

📅  最后修改于: 2023-12-03 15:05:58.071000             🧑  作者: Mango

Winston Logger - 为每个级别创建特定的日志文件

Winston是一个Node.js的日志记录库,它可以灵活地配置记录格式、级别和存储位置。该库允许你为每个级别创建特定的日志文件,让你更加细化地掌控日志记录和分析。

安装

安装Winston库以及文件日志记录器(winston-daily-rotate-file):

npm install winston winston-daily-rotate-file
使用

首先我们需要导入并配置Winston:

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

const myFormat = printf(({ level, message, timestamp }) => {
  return `${timestamp} [${level}]: ${message}`;
});

const logger = createLogger({
  format: combine(
    timestamp(),
    myFormat
  ),
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

我们创建了一个在控制台和文件combined.log中记录日志的记录器。

现在让我们为每个日志级别都创建一个文件记录器。

const myFormat = printf(({ level, message, timestamp }) => {
  return `${timestamp} [${level}]: ${message}`;
});

const getFileTransport = (level, filename) => {
  return new winston.transports.File({ 
    filename: `${level}.log`, 
    level: level,
    format: combine(
      timestamp(),
      myFormat
    )
  });
}

const logger = createLogger({
  format: combine(
    timestamp(),
    myFormat
  ),
  transports: [
    new winston.transports.Console(),
    getFileTransport('error'),
    getFileTransport('warn'),
    getFileTransport('info'),
    getFileTransport('http'),
    getFileTransport('verbose'),
    getFileTransport('debug'),
    getFileTransport('silly')
  ]
});

现在,我们为每个日志级别都创建了一个记录器,并使用特定的文件名存储记录。当Winston的Log方法被调用时,它会将日志事件分派给符合事件级别的所有传输。因此,在调用logger.error()时,记录器将将信息写入error.log文件中。

现在,每个级别都有一个专用文件和一个记录器。这让我们可以更方便地分析和过滤日志。

结论

使用Winston记录日志,可以更灵活地设置打印格式和记录级别。创建一个特定的文件日志记录器,可以更好地掌控和分析日志。