私はNodeJS Webアプリケーションを持っており、bunyan経由でログを追加しました。私のデスクトップ上で完全に動作します。 Azureでは、1〜10秒で完璧に動作し、それ以外のログは記録されません。アプリは引き続き実行され、正しく動作します。なぜこれが起こっているのか分かりません。 blobやAzureストレージではなく、プレーンなローカルファイルへのロギング。Azureでは、bunyanは数秒後にロギングを停止します
ログファイルは回転ファイルで、1日に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 - 1回/秒のハートビートを記録するためにアプリをスクラッチから作成して正常に機能しました。また、1回/分で作業しました。失敗したプロジェクトから分割して追加する必要があります。
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 - ブンヤンのログが停止した後、アプリはまだそれを呼び出すことが続いていると私は満足しています。 "呼び出しlog2" console.logsは、Azure Log Streamに表示されますが、〜30秒を超えると、それ以上何もbunyanログに追加されません。私は "ERROR"が記録されることはありません。これはまだプロジェクトの文脈であり、私はそれを別々に再現することはできません。
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 - 'rotating-file'から 'file'に変更されました。同じ動作です。 xxx loggingを有効にし、 "write log rec"メッセージを出力しますが、ファイルには追加しません。ファイルストリームに何かが発生しましたか?ストリームから「エラー」をキャッチし、そのイベントをキャッチしなかったクローズ/フィニッシュ/コルクを捕捉するコードを追加しました。
11/15 - Azureが私のアプリを再起動していることをpidsとログメッセージから確認できます。私はなぜ、何もlogging-errors.txtには何もわからない、stderrに何もない。最初のファイルが実行されたときに、2回目の実行がファイルに記録されていない理由もわかりません。しかし、なぜそれが再開してそれを防ぐのかを理解できれば、私は第2の問題に気をつけません。アズールは私にはとても不透明です。
私はこれを再現できません。あなたはロガー設定を共有していただけますか? –