温馨提示×

如何设置Ubuntu JS日志的详细程度

小樊
38
2025-12-02 02:57:47
栏目: 编程语言

在 Ubuntu 上调整 JavaScript(Node.js)日志详细程度通常从两类入手:一是应用内日志库的日志级别,二是承载进程的 systemd 服务日志级别。下面给出可直接落地的做法与建议。

一、应用内日志级别设置

  • 通用思路:在代码中为日志库设置 level(如 debuginfowarnerror),保存并重启应用后生效。
  • 常见库与示例:
    • Winston
      • 安装:npm install winston
      • 配置:
        • 代码示例:
          const winston = require('winston');
          const logger = winston.createLogger({
            level: 'debug', // 调整此处:debug/info/warn/error
            format: winston.format.combine(
              winston.format.timestamp(),
              winston.format.printf(({ timestamp, level, message }) => {
                return `${timestamp} ${level.toUpperCase()}: ${message}`;
              })
            ),
            transports: [new winston.transports.Console()]
          });
          logger.debug('调试信息');
          
        • 也可按传输分别设置级别(如控制台更详细、文件仅错误):
          new winston.transports.Console({ level: 'debug' }),
          new winston.transports.File({ filename: 'error.log', level: 'error' })
          
    • Pino
      • 安装:npm install pino
      • 配置:
        • 代码示例:
          const pino = require('pino')();
          pino.level = 'debug'; // 调整此处
          pino.info('信息');
          pino.debug('调试');
          
        • 也可通过环境变量控制:export PINO_LEVEL=debug
    • Morgan(Express HTTP 请求日志)
      • 安装:npm install morgan
      • 配置:
        • 代码示例:
          const express = require('express');
          const morgan = require('morgan');
          const app = express();
          app.use(morgan('combined')); // 常用:combined / common / tiny / dev
          // 也可按条件记录
          app.use(morgan(':method :url :status :res[content-length] - :response-time ms', {
            skip: (req,res) => res.statusCode < 400
          }));
          
    • Bunyan
      • 安装:npm install bunyan
      • 配置:
        • 代码示例:
          const bunyan = require('bunyan');
          const logger = bunyan.createLogger({ name: 'my-app', level: 'debug' });
          logger.debug('调试信息');
          
    • 环境变量快捷控制
      • Winstonexport WINSTON_LEVEL=debug
      • Pinoexport PINO_LEVEL=debug
      • 然后启动:node your-app.js
    • 运行时动态调节
      • 部分库支持运行时改级,例如 Winston:`logger.level = ‘debug’**。

二、systemd 服务日志级别

  • 若你的 Node.js 进程由 systemd 托管,可调整服务的 LogLevel(影响 systemd 自身对该服务日志的捕获与显示详细程度),以及是否将 stdout/stderr 接入 syslog
  • 示例单元文件片段:
    [Unit]
    Description=My Node.js App
    
    [Service]
    ExecStart=/usr/bin/node /path/to/your/script.js
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=my_service
    LogLevel=info   # 可改为 debug 等
    
    [Install]
    WantedBy=multi-user.target
    
  • 使配置生效并验证:
    • 重新加载:sudo systemctl daemon-reload
    • 重启服务:sudo systemctl restart my_service
    • 查看日志:sudo journalctl -u my_service -f(加 -f 实时跟踪)

三、环境与性能建议

  • 环境策略:开发环境用 debug/info,生产环境用 warn/error,以降低开销并减少日志量。
  • 输出目标:开发期输出到控制台便于排查;生产期建议写入文件,并按级别分流(如 error.log 仅错误,combined.log 全量)。
  • 日志轮转:使用 logrotate 控制单文件大小与保留周期,示例:
    /path/to/your.log {
      daily
      missingok
      rotate 7
      compress
      notifempty
      create 640 root adm
    }
    
  • 性能与可观测性:高并发场景优先选用高性能库(如 Pino),必要时启用异步写入/批量写入,并考虑接入 ELK/Graylog 做集中分析与告警。

0