温馨提示×

如何定制Node.js日志格式与输出

小樊
41
2025-10-30 00:18:49
栏目: 编程语言

在 Node.js 中,可以使用第三方库 winston 或内置的 console 模块来定制日志格式与输出。下面分别介绍这两种方法。

使用 Winston

  1. 首先,安装 winston
npm install winston
  1. 创建一个 logger.js 文件,设置自定义日志格式和输出:
const { createLogger, format, transports } = require('winston');

const myFormat = format.combine(
  format.timestamp({
    format: 'YYYY-MM-DD HH:mm:ss'
  }),
  format.printf(({ timestamp, level, message }) => {
    return `[${timestamp}] ${level.toUpperCase()}: ${message}`;
  })
);

const logger = createLogger({
  level: 'info',
  format: myFormat,
  transports: [
    new transports.Console(),
    new transports.File({ filename: 'logs/error.log', level: 'error' }),
    new transports.File({ filename: 'logs/combined.log' })
  ]
});

module.exports = logger;

在这个例子中,我们定义了一个自定义格式,包括时间戳、日志级别和消息。然后,我们将这个格式应用到 createLogger 函数中,并将日志输出到控制台和两个不同的文件中。

  1. 在你的应用程序中使用 logger
const logger = require('./logger');

logger.info('Hello, world!');
logger.error('An error occurred');

使用内置的 console 模块

虽然内置的 console 模块没有直接支持自定义格式,但可以通过一些技巧来实现。例如,可以使用 console.log 的占位符功能来自定义输出格式:

function log(level, message) {
  const timestamp = new Date().toISOString().replace('T', ' ').substring(0, 19);
  console.log(`[${timestamp}] [${level.toUpperCase()}]: ${message}`);
}

log('info', 'Hello, world!');
log('error', 'An error occurred');

这种方法虽然简单,但可能不如使用 winston 等第三方库灵活。如果需要更多的功能,建议使用 winston

0