linux

Node.js日志格式化方法介绍

小樊
60
2025-06-14 02:42:46
栏目: 编程语言

在Node.js中,日志格式化是一个重要的环节,它可以帮助开发者更好地跟踪程序运行状态、捕获异常、定位问题并优化性能。以下是几种常见的日志格式化方法:

使用内置的 console 模块

Node.js的内置 console 模块提供了基本的日志记录功能,可以通过自定义格式化函数来控制日志输出格式。例如:

function customFormat(level, message) {
  return `[${new Date().toISOString()}] [${level.toUpperCase()}] ${message}`;
}

console.log(customFormat('INFO', 'This is an info message'));
console.error(customFormat('ERROR', 'This is an error message'));

使用第三方日志库

Winston

Winston是一个非常流行的Node.js日志库,支持多种传输方式和格式化选项。以下是一个使用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, Winston!');

#### Morgan

Morgan是一个HTTP请求日志中间件,适用于Express应用程序。以下是一个使用Morgan自定义日志格式的示例:

```javascript
const express = require('express');
const morgan = require('morgan');
const app = express();

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

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

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

#### Bunyan

Bunyan是一个简单易用的Node.js日志库,专注于提供结构化的JSON日志输出。以下是一个使用Bunyan记录日志的示例:

```javascript
const bunyan = require('bunyan');

const logger = bunyan.createLogger({
  name: 'myapp',
  streams: [
    { level: 'info', stream: process.stdout },
    { level: 'error', path: 'app-error.log' }
  ]
});

logger.info('Hello, Bunyan!');
logger.error('ERROR_MESSAGE');

自定义日志格式

自定义日志格式可以根据项目需求进行调整,包括日志级别、时间戳、线程ID、请求ID等信息。例如,使用模板字符串来格式化日志:

const timestamp = new Date().toISOString();
const level = 'info';
const message = 'This is a log message';
console.log(`${timestamp} [${level.toUpperCase()}] ${message}`);

通过以上方法,可以有效地在Node.js中实现日志的格式化,帮助开发者更高效地进行调试和维护。

0
看了该问题的人还看了