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

如何将Azure App Service的Node.js应用stdout、stderr日志存入Azure Blob Storage

Node.js应用stdout/stderr输出同步到Azure Blob Storage的可行方案

无需修改代码的原生配置方案

你之前看到的仅支持.NET的是App Service专属的「应用程序日志(Blob)」功能,诊断设置中全语言通用的AppServiceConsoleLogs采集项支持捕获所有语言的stdout/stderr输出,直接存入Blob存储且不会12小时自动失效,配置要点如下:

  • 进入App Service资源的「诊断设置」页面
  • 点击「添加诊断设置」
  • 日志类别勾选 App Service控制台日志(对应stdout/stderr的全部输出)
  • 目标详情选择「存档到存储帐户」,指定目标Blob存储账户与存储容器
  • 保存配置后最长15分钟生效,日志会按小时分片写入指定Blob容器

代码侧集成方案

如果需要自定义日志格式、分级存储、批量上报等能力,可通过Node.js生态的日志库搭配Azure Blob传输插件实现:

方案1:基于winston实现

使用主流日志库winston搭配winston-azure-blob-transport传输器,示例代码如下:

const winston = require('winston');
const { AzureBlobTransport } = require('winston-azure-blob-transport');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new AzureBlobTransport({
      accountName: "你的存储账户名称",
      accountKey: "你的存储账户访问密钥",
      containerName: "日志存储容器名称",
      blobName: () => `app-logs/${new Date().toISOString().split('T')[0]}/${Date.now()}.log`
    })
  ]
});

// 可选:拦截全局console输出,所有console.log/console.error都会自动写入Blob
console.log = (...args) => logger.info(args.join(' '));
console.error = (...args) => logger.error(args.join(' '));

方案2:基于pino实现

高性能日志库pino可搭配pino-azure-blob传输插件实现低开销的日志上报,示例代码如下:

const pino = require('pino');
const transport = pino.transport({
  target: 'pino-azure-blob',
  options: {
    connectionString: "你的Blob存储连接字符串",
    container: "日志存储容器名称",
    blockSize: 1024 * 1024, // 日志累积到1MB时触发写入
    flushIntervalMs: 10000 // 每10秒强制刷写一次日志
  }
});

const logger = pino(transport);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:39:00