首页主机资讯Ubuntu Node.js日志级别设置方法

Ubuntu Node.js日志级别设置方法

时间2025-10-20 11:29:04发布访客分类主机资讯浏览1379
导读:Ubuntu下Node.js日志级别设置方法 在Ubuntu系统中,Node.js应用程序的日志级别设置主要依赖所使用的日志库(如winston、morgan、bunyan等),常见方式包括代码硬编码、环境变量、配置文件及进程管理工具(如P...

Ubuntu下Node.js日志级别设置方法

在Ubuntu系统中,Node.js应用程序的日志级别设置主要依赖所使用的日志库(如winston、morgan、bunyan等),常见方式包括代码硬编码、环境变量、配置文件及进程管理工具(如PM2),以下是具体实现方法:

1. 通过代码直接设置(最直接的方式)

根据项目使用的日志库,在初始化日志记录器时通过level属性指定日志级别。以下是主流日志库的示例:

Winston(推荐)

const winston = require('winston');

const logger = winston.createLogger({

  level: 'info', // 设置默认日志级别(可选:'error'、'warn'、'info'、'debug'、'verbose'等)
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.printf(({
 timestamp, level, message }
    ) =>
 `${
timestamp}
 [${
level}
]: ${
message}
`)
  ),
  transports: [
    new winston.transports.Console(), // 输出到控制台
    new winston.transports.File({
 filename: 'error.log', level: 'error' }
), // 仅记录error级别到文件
    new winston.transports.File({
 filename: 'combined.log' }
) // 记录所有级别到文件
  ]
}
    );
    
logger.debug('Debug message (不会记录,因级别为info)');
     // 不会输出
logger.info('Info message (会记录)');
     // 会输出

Morgan(HTTP请求日志)

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

// 设置日志级别(预定义格式:'tiny'、'common'、'combined'等)
app.use(morgan('combined'));
     // 输出详细请求日志(如::method :url :status :response-time ms - :res[content-length])
// 或自定义格式
app.use(morgan(':method :url :status - :response-time ms'));
     

Bunyan(结构化日志)

const bunyan = require('bunyan');

const logger = bunyan.createLogger({

  name: 'my-app',
  level: 'debug', // 结构化日志级别
  serializers: bunyan.stdSerializers // 标准化日志输出(如req/res对象)
}
    );

logger.info({
 user: 'admin' }
    , 'User logged in');
     // 输出结构化日志

Pino(高性能日志)

const pino = require('pino');

const logger = pino({
 level: 'info' }
    );
     // 高性能JSON日志
logger.debug('Debug message (不会记录)');
    
logger.info('Info message (会记录)');
    

注意:修改代码后需重启Node.js应用使配置生效。

2. 通过环境变量设置(灵活推荐)

通过环境变量动态配置日志级别,避免修改代码,适合生产环境(如Docker、CI/CD流程)。步骤如下:

临时设置(当前终端有效)

LOG_LEVEL=debug node app.js # 启动时直接指定环境变量

永久设置(.env文件)

  1. 安装dotenv库(用于加载.env文件):
    npm install dotenv
    
  2. 创建.env文件(项目根目录):
    LOG_LEVEL=info
    
  3. 在代码中加载环境变量:
    require('dotenv').config();
         // 加载.env文件
    const winston = require('winston');
    
    const logger = winston.createLogger({
    
      level: process.env.LOG_LEVEL || 'info', // 优先读取环境变量,未设置则默认为info
      format: winston.format.json(),
      transports: [new winston.transports.Console()]
    }
        );
    
    

注意:环境变量的优先级高于代码中的默认值,修改.env文件后无需重启应用(若使用nodemon等工具会自动重启)。

3. 通过配置文件设置(适合复杂项目)

使用配置文件(如JSON、YAML)管理日志级别,便于团队协作和环境切换(开发/测试/生产)。

使用config库(推荐)

  1. 安装config库:
    npm install config
    
  2. 创建配置文件(项目根目录/config/default.json):
    {
    
      "logging": {
    
        "level": "info",
        "transports": {
    
          "console": true,
          "file": false
        }
    
      }
    
    }
        
    
  3. 在代码中读取配置:
    const config = require('config');
        
    const winston = require('winston');
    
    const logger = winston.createLogger({
        
      level: config.get('logging.level'), // 从配置文件读取日志级别
      format: winston.format.json(),
      transports: [
        config.get('logging.transports.console') &
        &
         new winston.transports.Console(),
        config.get('logging.transports.file') &
        &
     new winston.transports.File({
     filename: 'app.log' }
    )
      ].filter(Boolean) // 过滤掉false值
    }
        );
    
    

自定义JSON配置文件

  1. 创建config.json
    {
    
      "logLevel": "debug"
    }
        
    
  2. 在代码中读取:
    const fs = require('fs');
        
    const config = JSON.parse(fs.readFileSync('config.json', 'utf8'));
        
    const winston = require('winston');
    
    const logger = winston.createLogger({
    
      level: config.logLevel,
      format: winston.format.simple(),
      transports: [new winston.transports.Console()]
    }
        );
    
    

注意:修改配置文件后需重启应用(除非使用热重载工具)。

4. 使用PM2管理日志级别(生产环境推荐)

PM2是Node.js进程管理工具,可通过其配置文件动态设置日志级别,支持日志分割、轮转等功能。

步骤

  1. 安装PM2:
    npm install -g pm2
    
  2. 创建PM2配置文件(项目根目录/ecosystem.config.js):
    module.exports = {
    
      apps: [
        {
    
          name: 'my-app',
          script: 'app.js',
          env: {
    
            NODE_ENV: 'development',
            LOG_LEVEL: 'debug' // 开发环境日志级别
          }
    ,
          env_production: {
    
            NODE_ENV: 'production',
            LOG_LEVEL: 'info' // 生产环境日志级别
          }
    ,
          log_date_format: 'YYYY-MM-DD HH:mm Z', // 日志时间格式
          out_file: '/var/log/my-app.log', // 标准输出日志路径
          error_file: '/var/log/my-app-error.log' // 错误日志路径
        }
    
      ]
    }
        ;
        
    
  3. 启动应用:
    pm2 start ecosystem.config.js --env production # 切换到生产环境
    
  4. 动态修改日志级别(无需重启):
    pm2 restart my-app --update-env # 重启并应用新环境变量
    

优势:PM2支持日志分割(按大小/时间)、日志清理、进程守护等功能,适合生产环境。

总结

  • 开发环境:推荐使用环境变量(.env文件)或代码硬编码,方便调试。
  • 生产环境:推荐使用PM2配置文件或环境变量,结合日志分割和守护功能。
  • 复杂项目:推荐使用config库管理配置文件,支持多环境切换。

根据项目需求选择合适的方式,确保日志级别设置清晰、可维护。

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


若转载请注明出处: Ubuntu Node.js日志级别设置方法
本文地址: https://pptw.com/jishu/729894.html
Ubuntu Node.js日志中的并发问题排查 Ubuntu Node.js日志清理策略

游客 回复需填写必要信息