linux

如何自定义Node.js日志格式以便于分析

小樊
57
2025-04-20 12:08:48
栏目: 编程语言

自定义 Node.js 日志格式可以帮助你更好地分析和监控应用程序的运行状态。以下是几种常见的方法来自定义 Node.js 日志格式:

1. 使用 console.log 自定义格式

虽然 console.log 本身不支持复杂的格式化,但你可以通过模板字符串来简单地自定义输出格式:

const timestamp = new Date().toISOString();
const message = 'User logged in';
const userId = 123;

console.log(`${timestamp} [INFO] ${message} - User ID: ${userId}`);

2. 使用第三方日志库

有许多成熟的第三方日志库提供了丰富的功能来自定义日志格式,例如 winstonpino

使用 winston

winston 是一个非常流行的日志库,支持多种传输方式和自定义格式。

首先,安装 winston

npm install winston

然后,配置 winston

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp({
      format: 'YYYY-MM-DD HH:mm:ss'
    }),
    winston.format.printf(({ timestamp, level, message }) => {
      return `${timestamp} [${level.toUpperCase()}] ${message}`;
    })
  ),
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

logger.info('User logged in', { userId: 123 });

使用 pino

pino 是一个高性能的日志库,支持结构化日志和自定义格式。

首先,安装 pino

npm install pino

然后,配置 pino

const pino = require('pino');
const prettyPrint = require('pino-pretty');

const logger = pino({
  level: 'info',
  transport: {
    target: 'pino-pretty',
    options: {
      colorize: true,
      translateTime: 'SYS:standard'
    }
  }
});

logger.info('User logged in', { userId: 123 });

3. 使用 morgan 进行 HTTP 请求日志

如果你需要记录 HTTP 请求日志,可以使用 morgan 中间件。

首先,安装 morgan

npm install morgan

然后,在 Express 应用中使用 morgan

const express = require('express');
const morgan = require('morgan');

const app = express();

app.use(morgan(':method :url :status :res[content-length] - :response-time ms'));

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

你可以通过自定义 morgan 的格式来改变日志输出:

const morgan = require('morgan');
const customFormat = ':method :url :status :res[content-length] - :response-time ms :user-agent';

app.use(morgan(customFormat));

总结

自定义 Node.js 日志格式可以通过多种方式实现,包括使用 console.log、第三方日志库如 winstonpino,以及 HTTP 请求日志库如 morgan。选择适合你项目需求的方法,并根据需要进行配置和扩展。

0
看了该问题的人还看了