首页主机资讯Ubuntu下Node.js日志配置方法

Ubuntu下Node.js日志配置方法

时间2025-10-31 01:30:03发布访客分类主机资讯浏览1456
导读:Ubuntu下Node.js日志配置方法 1. 使用内置console.log(基础调试) console.log是Node.js最简单的日志方式,适合开发阶段快速输出信息。可通过字符串模板添加时间戳等信息增强可读性: const expr...

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', // 单个日志文件最大20MB
          maxFiles: '14d' // 保留14天日志
        }
    ),
        new transports.Console()
      ]
    }
        );
        
    
    module.exports = logger;
    
    

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

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

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

  • 安装PM2npm 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 # 单个文件最大10MB
    pm2 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级别
      // ...其他配置
    }
        );
        
    

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

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu下Node.js日志配置方法
本文地址: https://pptw.com/jishu/739540.html
Overlay在Docker中如何工作 怎样调整Linux Overlay的大小

游客 回复需填写必要信息