我有一个NodeJS网络应用程序,我通过bunyan添加了日志记录。在我的桌面上完美运行。在Azure上它可以完美地工作1-10秒,然后没有其他任何记录。该应用程序继续运行并正常运行。我无法弄清楚为什么会这样。记录到普通本地文件,而不是Blob或Azure存储。
日志类型为旋转文件,设置为每天旋转1天并保持3天。 Web应用程序将Always On和ARR Affinity设置为On,以及Application Logging(Filesystem),虽然我不确定这些因素。实例计数为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 - 从'rotate-file'更改为'file',行为相同。启用xxx日志记录并打印“写入日志记录”消息但不添加到文件中。文件流发生了什么事?添加了捕获close / finish / cork的代码,我们从流中捕获'error',没有捕获到任何这些事件。
11/15 - 我可以从pid和日志消息中看到Azure正在重新启动我的应用程序。我不知道为什么,在logging-errors.txt中什么都没有,stderr没什么可怕的。我也不知道为什么第二次运行没有记录到文件,当第一次运行时。但是,如果我能弄清楚它为什么重新启动并阻止它,那么我不会关心第二个问题。 Azure对我来说是如此不透明。
答案 0 :(得分:0)
经过多次头脑冲击,我们确定我们尝试做的事情与Azure网络应用程序不兼容。我们需要站起来一个VM。结束这个问题。