私はNode.JsでAzure関数を使用しています。Azure関数 - 異なる呼び出し間の共有オブジェクト
私は、AzureポータルUIに表示されているAzure関数のコンテキストオブジェクトを使用して関数のログに書き込むカスタムNode.jsログモジュールを作成しました。複数の場所でそれを使用しているので、それをシングルトンオブジェクトとして定義し、その関数のコンテキストオブジェクトをそれに注入しました。
次に、他のすべての関数の実行が同じロガーオブジェクトを使用していて、データを独自のコンテキストログに記録していないことがわかりました。各関数の呼び出しが分離され、異なる呼び出しの間に共有モジュールが存在しないことが予想されたので、これは非常に奇妙です。
これは、紺碧の機能コードです:
var Logger = require('../custom_modules/logger/customLogger.js');
module.exports = function (azureContext) {
function infoFn(msg){
azureContext ? azureContext.log(msg) : console.log(msg);
}
function errorFn(msg){
azureContext ? azureContext.log(msg) : console.error(msg);
}
var logger = Logger(infoFn, errorFn);
logger.info('function was triggered');
azureContext.done();
}
そして、これがロガーモジュールのコードです:
var _customLogger;
var CustomLogger = function (info, error) {
this.error = error;
this.info = info;
};
function logger(info, error) {
if (!_customLogger) {
_customLogger = new CustomLogger(info, error);
} else {
if(info){
_customLogger.info = info;
}
if(error){
_customLogger.error = error;
}
}
return _customLogger;
}
module.exports = logger;
が、それはこのようにすると仮定されていますか?私たちは、それぞれの関数呼び出しが分離されることを期待していました。
ご回答いただきありがとうございます。私は、Azure関数を使用しているときにプロセスの分離がデフォルトで行われていると考えていました(これは私が得る限り、Serverless Architectureの考え方です)。あなたが書いたことから、私はシングルトンオブジェクトとしてロガーを使うことができないと分かりました。私はそれを変更します。ありがとう。 –
ええ、これは本当に吸う。しかし、私たちにコンテキストを渡すのではなく、console.logをサポートする必要があるもう一つの理由。 –