linux

Node.js日志格式化有哪些推荐方式

小樊
45
2025-10-28 00:16:10
栏目: 编程语言

在Node.js中,有多种方法可以用来格式化日志。以下是一些推荐的日志格式化方法和库:

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

虽然 console.log 是最基本的日志输出方式,但你可以通过自定义字符串模板来格式化日志。

const timestamp = new Date().toISOString();
const logMessage = `[${timestamp}] [INFO] ${message}`;
console.log(logMessage);

2. 使用 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('Hello, world!');

3. 使用 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('Hello, world!');

4. 使用 morgan

morgan 是一个HTTP请求日志中间件,适用于Express应用。

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

const app = express();

app.use(morgan('combined'));

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

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

5. 使用 log4js

log4js 是一个灵活的日志库,支持多种输出方式和格式化选项。

const log4js = require('log4js');

log4js.configure({
  appenders: {
    out: { type: 'stdout', layout: { type: 'pattern', pattern: '[%d{yyyy-mm-dd HH:mm:ss}] [%p] %m%n' } }
  },
  categories: {
    default: { appenders: ['out'], level: 'info' }
  }
});

const logger = log4js.getLogger();

logger.info('Hello, world!');

总结

选择哪种日志格式化方式取决于你的具体需求,包括性能、灵活性、易用性和功能丰富程度。winstonpino 是目前最流行的选择,它们提供了丰富的功能和良好的性能。

0
看了该问题的人还看了