You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

最近部署后我的ElasticBeanstalk日志为何呈现此状态?

解决Elastic Beanstalk Node.js环境日志显示ANSI代码的问题

嘿,我一眼就看出问题了——你的日志里那些[90m、[32m、[1m之类的字符是ANSI颜色控制代码,这是因为你的Node.js应用日志库(比如morgan、winston这类)开启了颜色输出,但Elastic Beanstalk的日志系统不会解析这些代码,所以直接把它们原封不动打印出来,导致日志乱糟糟的可读性很差。

下面给你几个靠谱的解决办法,按优先级排序:

1. 从源头关闭日志的颜色输出(最推荐)

这是最彻底的方式,直接让日志库别输出颜色代码就行,不同的日志库设置方式略有不同:

如果你用的是morgan(常见的HTTP请求日志库)

原来的代码可能用了带颜色的dev格式,改成无颜色的格式就好:

const morgan = require('morgan');

// 原来的带颜色写法
// app.use(morgan('dev'));

// 换成无颜色的combined格式
app.use(morgan('combined'));

// 或者自定义完全匹配你现有日志结构的无颜色格式
app.use(morgan('[:date[iso]] :method :url - :status (:res[content-length]B, :response-time ms)'));

如果你用的是winston日志库

找到日志配置里的colorize选项关掉,或者直接用不带颜色的格式化器:

const winston = require('winston');

const logger = winston.createLogger({
  transports: [
    new winston.transports.Console({
      format: winston.format.combine(
        winston.format.timestamp({ format: 'YYYY-MM-DDTHH:mm:ss.SSSZ' }),
        winston.format.printf(info => `${info.timestamp} ${info.level.toUpperCase()} ${info.message}`)
        // 删掉任何winston.format.colorize()相关的配置
      )
    })
  ]
});

自定义日志工具

如果是你自己写的日志函数,检查有没有判断终端环境并输出颜色的逻辑,直接删掉颜色相关的代码就行——比如去掉那些拼接\x1b[32m这类控制字符的部分。

2. 用部署脚本过滤日志里的ANSI代码(不用改应用代码)

如果暂时不想动应用代码,也可以在Elastic Beanstalk部署后自动清理日志里的ANSI代码:

在你的项目根目录下创建.ebextensions文件夹,然后新建一个01-clean-ansi-logs.config文件,内容如下:

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_remove_ansi_codes.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash
      # 清理Node.js应用日志里的ANSI代码
      sed -i 's/\x1b\[[0-9;]*m//g' /var/log/nodejs/nodejs.log
      # 如果还有其他日志文件需要处理,继续添加sed命令

这个脚本会在每次部署完成后,自动去掉日志文件里的所有ANSI控制字符。

总结

优先选第一种方法,从源头解决问题,避免后续日志再出现乱码;如果因为各种原因不能改应用代码,再用第二种脚本过滤的方式。

内容的提问来源于stack exchange,提问作者Novu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:11:44