如何配置Debian JS日志

Debian 上配置 JS 日志的实用方案一 选择日志库与输出目标常用日志库:Winston:多传输、可结构化输出,适合复杂场景。Pino:高性能、低开销,生产环境优选。Morgan:Express 的 HTTP 请求日志中间件。基本输出目标:Console(开发/调试)文件(按级别拆分,如 error/combined)可选:HTTP、流等(Winston 支持多传输)示例(Winst

Debian 上配置 JS 日志的实用方案

一 选择日志库与输出目标

  • 常用日志库:
    • Winston:多传输、可结构化输出,适合复杂场景。
    • Pino:高性能、低开销,生产环境优选。
    • MorganExpress 的 HTTP 请求日志中间件。
  • 基本输出目标:
    • Console(开发/调试)
    • 文件(按级别拆分,如 error/combined)
    • 可选:HTTP、流等(Winston 支持多传输)
  • 示例(Winston 最小可用配置):
    • 安装:npm install winston
    • 配置:
      • const winston = require(‘winston’);
      • const logger = winston.createLogger({
        level: ‘info’,
        format: winston.format.json(),
        transports: [
        new winston.transports.File({ filename: ‘error.log’, level: ‘error’ }),
        new winston.transports.File({ filename: ‘combined.log’ }),
        new winston.transports.Console({ format: winston.format.simple() })
        ]
        });
      • logger.info(‘Hello, world!’); logger.error(‘Oops!’);
  • 示例(Pino 控制台美化):
    • 安装:npm install pino pino-pretty
    • 配置:
      • const pino = require(‘pino’);
      • const logger = pino({
        level: ‘info’,
        transport: { target: ‘pino-pretty’, options: { colorize: true } }
        });
      • logger.info(‘Hello, world!’); logger.error(‘Oops!’);

二 自定义日志格式与 HTTP 访问日志

  • 自定义格式(Winston 时间戳 + printf):
    • const { format } = require(‘winston’);
    • const logger = winston.createLogger({
      level: ‘info’,
      format: format.combine(
      format.timestamp({ format: ‘YYYY-MM-DD HH:mm:ss’ }),
      format.printf(({ timestamp, level, message }) => {
      return ${timestamp} [${level.toUpperCase()}]: ${message};
      })
      ),
      transports: [new winston.transports.Console()]
      });
  • Express + Morgan(HTTP 请求日志):
    • 安装:npm install morgan
    • 配置:
      • const express = require(‘express’); const morgan = require(‘morgan’);
      • const app = express();
      • app.use(morgan(‘combined’)); // 或自定义 ‘:method :url :status :res[content-length] – :response-time ms’
      • app.listen(3000);
  • 反向代理日志格式(Nginx 示例):
    • http { log_format custom ‘$remote_addr – $remote_user [$time_local] “$request” $status $body_bytes_sent “$http_referer” “$http_user_agent” “$http_x_forwarded_for”’; access_log /var/log/nginx/access.log custom; error_log /var/log/nginx/error.log; … }
    • 如需调整代理层日志级别,可在 Nginx 中设置:log_level info;(注意这是 Nginx 自身日志级别,非应用日志级别)。

三 日志轮转与系统级管理

  • 应用内轮转(Winston + Daily Rotate File):
    • 安装:npm install winston-daily-rotate-file
    • 配置:
      • const DailyRotateFile = require(‘winston-daily-rotate-file’);
      • const transport = new DailyRotateFile({
        filename: ‘application-%DATE%.log’,
        datePattern: ‘YYYY-MM-DD-HH’,
        zippedArchive: true,
        maxSize: ‘20m’,
        maxFiles: ‘14d’
        });
      • const logger = winston.createLogger({ level: ‘info’, transports: [transport, new winston.transports.Console()] });
  • 系统级轮转(logrotate,适用于 Node 直接写文件或 PM2 输出文件):
    • 新建配置:sudo nano /etc/logrotate.d/nodejs
    • 示例:
      • /path/to/your/nodejs/logs/*.log {
        daily
        rotate 7
        compress
        missingok
        notifempty
        create 0644 root root
        }
    • 校验与强制执行:
      • sudo logrotate -d /etc/logrotate.d/nodejs(干跑)
      • sudo logrotate -f /etc/logrotate.d/nodejs(强制执行)
  • 进程管理(PM2 内置日志与轮转):
    • 安装:sudo npm install -g pm2
    • 启动:pm2 start app.js --name my-app
    • 查看:pm2 logs
    • 分别输出错误与标准输出:pm2 start app.js --name my-app --error err.log --output out.log
    • 日志轮转(PM2 内置策略):pm2 set pm2-logrotate:max_size 10Mpm2 set pm2-logrotate:retain 14

四 环境变量与运行时控制

  • 通过环境变量控制日志级别与输出:
    • const logLevel = process.env.LOG_LEVEL || ‘info’;
    • const logger = winston.createLogger({
      level: logLevel,
      format: winston.format.json(),
      transports: [new winston.transports.Console(), new winston.transports.File({ filename: ‘error.log’, level: ‘error’ }), new winston.transports.File({ filename: ‘combined.log’ })]
      });
  • Docker 场景(docker-compose.yml 片段):
    • services:
      • app:
        • build: .
        • environment:
          • NODE_ENV=production
          • LOG_LEVEL=debug
        • logging:
          • driver: “json-file”
          • options:
            • max-size: “10m”
            • max-file: “3”

五 集中式日志与监控

  • 使用 ELK Stack(Elasticsearch + Logstash + Kibana)集中收集与分析:
    • 安装并启动 Elasticsearch、Logstash、Kibana(示例为 7.x 源安装与 systemd 启动)。
    • Logstash 收集 Node.js 日志(/etc/logstash/conf.d/nodejs.conf 示例):
      • input { file { path => “/path/to/your/nodejs/logs/*.log” start_position => “beginning” } }
      • filter { }
      • output { elasticsearch { hosts => [“localhost:9200”] index => “nodejs-logs-%{+YYYY.MM.dd}” } }
    • 重启 Logstash:sudo systemctl restart logstash
    • Kibana 创建索引模式(如 nodejs-logs-*)并在 Discover 中查看分析。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/1470772.html

(0)
派派
上一篇 2025-12-12
下一篇 2025-12-12

发表回复

登录后才能评论