カスタム log.js ファイルを使用して 2 つの異なるファイルにログインし、異なるモジュール間で 1 時間ごとにログをローテーションするように winston を構成しました。
Log.js
var winston = require('winston');
// setup winston for request log
winston.loggers.add('request', {
transports: [
// Setup your shared transports here for request log
new (winston.transports.DailyRotateFile)({
name: '/var/log/nodejs/request.log',
level:'info',
filename : '/var/log/nodejs/request.log' ,
datePattern: '.yyyy-MM-dd-HH'
}),
]
});
// setup winston for response log
winston.loggers.add('response', {
transports: [
// Setup your shared transports here for bids log
new (winston.transports.DailyRotateFile)({
name:'/var/log/nodejs/response.log',
level:'info',
filename : '/var/log/nodejs/response.log' ,
datePattern: '.yyyy-MM-dd-HH'})
]
});
winston.remove(winston.transports.Console);
// to provide the each category across the module ;
module.exports.requestlog = winston.loggers.get('request');
module.exports.responselog = winston.loggers.get('response');
このログ ファイルを使用して、server.js の this.Sample を使用してさまざまなファイルからのログを保存しています。
サーバー.js
var requestlog = require('./log.js').requestlog;
var requestObject = {}// large json object with more that 60 key and value
request.info('request',requestObject);
1 時間後、メモリ使用量を上から順に見ると、EC2 で 3 GB 以上の RAM が消費されていることがわかります (ほとんどの部分がキャッシュされていることが示されています)。これにより、アプリケーション全体のレイテンシが増加します。
winston を削除すると、アプリケーションは正常に動作し、合計メモリは常に約 1.4 ~ 1.5 GB になります。
この状況を打破する方法はありますか。
私のログファイルは 1 時間あたり約 2Gb で、gzip を使用してファイルを圧縮し、aws cli を使用して s3 に送信しています。