ubuntu

Ubuntu JS日志格式如何统一规范

小樊
39
2025-08-19 01:56:00
栏目: 编程语言

在Ubuntu系统中统一规范JavaScript日志格式,可参考以下方案,主要以Node.js应用为例:

一、选择日志库

推荐使用 WinstonPino 等库,支持自定义格式、多传输方式(文件、控制台等)及结构化日志输出。

二、定义统一格式

  1. 基础格式要求

    • 包含 时间戳(ISO 8601或YYYY-MM-DD HH:mm:ss格式)、日志级别(ERROR/WARN/INFO等)、消息内容,建议添加 模块/服务名称 以便定位来源。
    • 示例格式:[2025-08-19 14:30:00] [ERROR] [auth-service] 用户登录失败:用户名或密码错误
  2. 结构化日志(推荐)
    以JSON格式输出,便于机器解析,例如:

    {
      "timestamp": "2025-08-19T14:30:00.000Z",
      "level": "ERROR",
      "service": "auth-service",
      "message": "用户登录失败",
      "details": {
        "username": "test_user",
        "error_code": 401
      }
    }
    

    可通过Winston的format.json()或Pino的默认JSON格式实现。

三、配置日志库

以Winston为例,创建统一配置文件(如logger.js):

const { createLogger, format, transports } = require('winston');

const logger = createLogger({
  level: 'info',
  format: format.combine(
    format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    format.printf(({ timestamp, level, service, message, details }) => {
      const base = `${timestamp} [${level.toUpperCase()}] [${service}] ${message}`;
      return details ? `${base} | Details: ${JSON.stringify(details)}` : base;
    })
  ),
  transports: [
    new transports.Console(),
    new transports.File({ filename: 'logs/app.log' })
  ]
});

module.exports = logger;

使用时传入模块名等上下文:

const logger = require('./logger');
logger.error('用户登录失败', { service: 'auth-service', username: 'test_user' });

四、系统级规范

  1. 日志文件管理

    • 按日期或大小分割日志文件,避免单个文件过大,可通过logrotate工具配置轮转策略。
    • 示例轮转配置(/etc/logrotate.d/js-logs):
      /var/log/js-app/*.log {
        daily
        rotate 7
        compress
        missingok
        notifempty
      }
      
  2. 集中化日志管理
    将日志发送至ELK Stack、Graylog等平台,便于统一检索和分析。例如通过Winston的winston-elasticsearch传输至Elasticsearch。

五、其他注意事项

通过以上步骤,可在Ubuntu环境下实现JavaScript日志的格式统一与规范管理。

0
看了该问题的人还看了