一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Ubuntu下Node.js日志配置方法

时间:2026-06-10 08:39:48 编辑:袖梨 来源:一聚教程网

Ubuntu下Node.js日志配置方法

Ubuntu下Node.js日志配置方法

1. 使用内置console.log(基础调试)

console.log是Node.js最简单的日志方式,适合开发阶段快速输出信息。可通过字符串模板添加时间戳等信息增强可读性:

const express = require('express');const app = express();const port = 3000;app.get('/', (req, res) => {console.log(`[${new Date().toISOString()}] INFO: Request received at ${req.url}`);res.send('Hello World!');});app.listen(port, () => {console.log(`[${new Date().toISOString()}] INFO: Server running at http://localhost:${port}/`);});

缺点:无法灵活控制日志级别、格式或持久化存储,不适合生产环境。

2. 使用第三方日志库(推荐生产环境)

2.1 Winston(通用灵活)

Winston是Node.js最流行的日志库,支持多传输(控制台、文件、远程服务器等)、日志级别和格式化。

  • 安装:npm install winston
  • 配置示例(创建logger.js):
    const { createLogger, format, transports } = require('winston');const logger = createLogger({level: process.env.LOG_LEVEL || 'info', // 通过环境变量设置日志级别format: format.combine(format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), // 添加时间戳format.printf(({ timestamp, level, message }) => `[${timestamp}] ${level}: ${message}`) // 自定义格式),transports: [new transports.Console(), // 输出到控制台(开发环境友好)new transports.File({ filename: 'logs/error.log', level: 'error' }), // 错误日志单独文件new transports.File({ filename: 'logs/combined.log' }) // 所有日志合并文件]});// 非生产环境添加控制台输出(带简单格式)if (process.env.NODE_ENV !== 'production') {logger.add(new transports.Console({ format: format.simple() }));}module.exports = logger;
  • 使用示例:
    const logger = require('./logger');logger.info('Application started');logger.error('Something went wrong!');

优点:功能全面,支持日志分级、格式化和多目标输出,适合复杂应用。

2.2 Morgan(HTTP请求日志中间件)

Morgan专门用于记录HTTP请求日志,适合Express/Koa等框架,可将请求信息输出到文件或控制台。

  • 安装:npm install morgan
  • 配置示例:
    const express = require('express');const morgan = require('morgan');const fs = require('fs');const path = require('path');const app = express();const port = 3000;// 创建写入流(输出到access.log文件)const accessLogStream = fs.createWriteStream(path.join(__dirname, 'logs/access.log'), { flags: 'a' });// 使用morgan中间件,格式为'combined'(Apache标准格式)app.use(morgan('combined', { stream: accessLogStream }));app.get('/', (req, res) => {res.send('Hello World!');});app.listen(port, () => {console.log(`Server running at http://localhost:${port}/`);});

优点:专注于HTTP请求日志,格式规范,便于分析请求流量和性能。

3. 日志轮转(防止日志过大)

当日志文件过大时,需通过轮转压缩旧日志,节省存储空间。常用winston-daily-rotate-file库实现每日轮转。

  • 安装:npm install winston-daily-rotate-file
  • 配置示例(修改logger.js):
    const { createLogger, format, transports } = require('winston');const DailyRotateFile = require('winston-daily-rotate-file');const logger = createLogger({level: 'info',format: format.combine(format.timestamp(),format.json()),transports: [new DailyRotateFile({ // 每日轮转filename: 'logs/application-%DATE%.log',datePattern: 'YYYY-MM-DD',zippedArchive: true, // 压缩旧日志maxSize: '20m', // 单个日志文件最大20MBmaxFiles: '14d' // 保留14天日志}),new transports.Console()]});module.exports = logger;

优点:自动化管理日志文件,避免磁盘空间耗尽。

4. 使用PM2管理日志(进程与日志分离)

PM2是Node.js进程管理工具,可自动重启应用并提供日志管理功能,适合生产环境部署。

  • 安装PM2:npm install pm2 -g
  • 启动应用并管理日志:
    # 启动应用(名称为my-app)pm2 start app.js --name my-app# 查看实时日志pm2 logs my-app# 查看特定日志文件pm2 logs my-app --lines 100 # 查看最近100行# 配置日志轮转(限制文件大小和保留数量)pm2 set pm2-logrotate:max_size 10M # 单个文件最大10MBpm2 set pm2-logrotate:retain 7 # 保留7天日志

优点:无需手动管理进程和日志,支持日志分割、压缩和远程存储,提升应用稳定性。

5. 通过环境变量配置日志级别

通过环境变量动态调整日志级别,适应不同环境(开发/测试/生产)的需求。

  • 设置环境变量:
    # 开发环境(显示debug日志)LOG_LEVEL=debug node app.js# 生产环境(仅显示error和info日志)LOG_LEVEL=info node app.js
  • 代码中使用(Winston示例):
    const logger = createLogger({level: process.env.LOG_LEVEL || 'info', // 默认info级别// ...其他配置});

优点:无需修改代码即可调整日志输出,提升灵活性。

热门栏目