ubuntu

Ubuntu Node.js日志格式化技巧有哪些

小樊
41
2025-09-08 04:33:56
栏目: 编程语言

在Ubuntu上对Node.js日志进行格式化,可根据需求选择不同工具和方法,以下是常用技巧:

一、使用内置console模块

通过自定义函数实现基础格式化,适合简单场景:

const moment = require('moment');
function log(level, message) {
  const timestamp = moment().format('YYYY-MM-DD HH:mm:ss');
  const colors = { info: '\x1b[34m', warn: '\x1b[33m', error: '\x1b[31m' };
  console.log(`${colors[level] || '\x1b[0m'}[${timestamp}] [${level.toUpperCase()}]: ${message}\x1b[0m`);
}
log('info', '这是一条信息日志');

说明:通过moment生成时间戳,用ANSI颜色码为不同日志级别添加颜色。

二、使用Winston日志库

功能强大,支持多格式化和传输方式:

const winston = require('winston');
const logger = winston.createLogger({
  format: winston.format.combine(
    winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    winston.format.printf(({ timestamp, level, message }) => 
      `[${timestamp}] [${level.toUpperCase()}]: ${message}`
    )
  ),
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: 'app.log' })
  ]
});
logger.info('这是一条信息日志');

说明:通过winston.format.combine组合时间戳和自定义消息格式,支持输出到控制台和文件。

三、使用Morgan中间件(适用于Express应用)

专为HTTP请求设计,可自定义请求日志格式:

const express = require('express');
const morgan = require('morgan');
const app = express();
morgan.token('custom', (req, res) => 
  `${req.method} ${req.url} ${res.statusCode} ${req.ip}`
);
app.use(morgan(':custom'));
app.get('/', (req, res) => res.send('Hello World!'));

说明:通过morgan.token定义请求方法、URL、状态码等字段,输出至控制台或文件。

四、使用Pino日志库

高性能,支持JSON格式和结构化日志:

const pino = require('pino');
const logger = pino({
  level: 'info',
  formatters: {
    level: (label) => ({ level: label.toUpperCase() })
  }
});
logger.info({ user: 'Alice', action: 'login' });

说明:默认输出JSON格式,可通过formatters自定义字段格式,适合微服务场景。

五、使用Log4js日志库

支持多级日志和灵活配置:

const log4js = require('log4js');
log4js.configure({
  appenders: {
    out: { type: 'stdout', layout: { type: 'pattern', pattern: '%d{YYYY-MM-DD HH:mm:ss} [%p] %c - %m%n' } }
  },
  categories: { default: { appenders: ['out'], level: 'info' } }
});
const logger = log4js.getLogger();
logger.info('这是一条信息日志');

说明:通过pattern语法定义时间戳、日志级别等格式,支持文件和控制台输出。

六、高级技巧

根据项目复杂度选择合适方案,简单场景优先使用内置模块或Winston,复杂应用可结合Morgan或Log4js。

0
看了该问题的人还看了