【问题标题】:On Azure, bunyan stops logging after a few seconds在 Azure 上,bunyan 在几秒钟后停止记录
【发布时间】:2017-11-09 22:54:19
【问题描述】:

我有一个 NodeJS 网络应用程序,我已经通过 bunyan 添加了日志记录。在我的桌面上完美运行。在 Azure 上,它可以完美运行 1-10 秒,然后不会记录任何其他内容。该应用程序将继续运行并正常运行。我无法弄清楚为什么会这样。记录到普通的本地文件,而不是 Blob 或 Azure 存储。

日志类型为rotating-file,设置为每天轮换1次,保留3天。 Web 应用程序的 Always On 和 ARR Affinity 设置为 On,以及应用程序日志记录(文件系统),尽管我不确定这里的因素。实例计数为 1 且未启用自动缩放。节点版本为 8.7.0。在控制台中:

> df -h .
D:\home\site\wwwroot\logs
Filesystem      Size  Used Avail Use% Mounted on
-               100G -892G   99G 113% /d/home/site

坦率地说,我不知道这想告诉我什么。不知何故,我们已经使用了 113% 的东西,这是不可能的。我们使用了负数,这是不可能的。仍然有 99G/100G 可用,所以我们真的只使用了 1%。那么这是一个“磁盘已满”的问题吗?我不知道。我在任何地方都没有看到这样的错误消息。

之前,该应用程序使用的是 console.log()。我们添加了拦截console.X的代码并先写入文件,然后调用普通函数。发生了同样的事情 - 它会工作几秒钟,然后不会记录任何其他内容。我原以为这是因为 Azure 的某些组件也拦截了控制台调用,以便将它们重定向到 XXX-stdout.txt,而我们俩这样做都以某种方式破坏了它。现在看来原因可能是其他原因。

有人知道为什么会这样吗?

11/12 - 从头开始​​创建一个应用程序来记录心跳一次/秒,它运行良好。也工作一次/分钟。我必须从失败的项目中添加一些片段,直到它中断。

11/13 - 我认为记录器配置没有什么特别之处。

'use strict'

const bunyan = require('bunyan');
const fs = require('fs');
const path = require('path');

const logname = 'tracker';
const folder = 'logs';
const filename = path.join(folder, logname + ".json");

if (!fs.existsSync(folder)) {
    fs.mkdirSync(folder);
}

var log = bunyan.createLogger({
    name: logname,
    streams: [{
        type: 'rotating-file',
        path: filename,
        level: process.env.LOG_LEVEL || "info",
        period: '1d',   // daily rotation
        count: 3        // keep 3 back copies
    }]
});

module.exports = { log };

仍在努力用比整个项目少的东西来重现它。

11/14 - 我很满意,在 bunyan 日志记录停止后,应用程序仍在继续调用它。 “调用 log2”console.logs 在 Azure 日志流中可见,但在 30 秒之后,不会再向 bunyan 日志添加任何内容。我从来没有看到记录的“错误”。这个还在项目的上下文中,我还是不能单独复现。

var log2 = bunyan.createLogger({
    name: logname,
    streams: [{
        type: 'rotating-file',
        path: filename,
        level: process.env.LOG_LEVEL || "info",
        period: '1d',   // daily rotation
        count: 3        // keep 3 back copies
    }]
});

var log = {};

log.info = function() {
    console.log("calling log2.info");
    try {
    log2.info(...arguments);
    } catch(err) {
        console.log("log.info ERROR " + err);
    }
}

11/14 - 从“旋转文件”更改为“文件”,行为相同。启用 xxx 日志记录并打印“写入日志记录”消息但不添加到文件中。文件流发生了什么事?添加了代码以在我们从流中捕获“错误”的位置捕获关闭/完成/软木塞,但没有捕获任何这些事件。

11/15 - 我可以从 pid 和日志消息中看到 Azure 正在重新启动我的应用程序。我不知道为什么,logging-errors.txt 中没有任何内容,stderr 上没有任何可怕的东西。我也不知道为什么第二次运行没有记录到文件,而第一次运行。但是,如果我能弄清楚它为什么会重新启动并阻止它,那么我就不会关心第二个问题。 Azure 对我来说太不透明了。

【问题讨论】:

  • 我无法重现此内容。你能分享一下记录器的配置吗?

标签: node.js azure azure-web-app-service bunyan


【解决方案1】:

经过多次摸索,我们确定我们正在尝试做的事情与 Azure Web 应用程序不兼容。我们需要建立一个虚拟机。结束这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2012-09-15
    • 2019-09-13
    • 2020-06-20
    相关资源
    最近更新 更多