こんにちは、私の問題です。最近、アクセス ログを保存するサーバーを 2021/10/01 にデプロイしました。これを行うためにmorganライブラリを使用し、ファイルのローテーションにはrotating-file-streamを使用しています。しかし、数日間活動した後、ローテーションが正しく行われていないことに気付きました。
これが私のコードです:
const morgan = require('morgan');
const rfs = require('rotating-file-stream');
const path = require('path');
const { format } = require('date-fns');
function logFilename() {
return `${format(new Date(), 'yyyy-MM-dd')}-access.log`;
}
const accessLogStream = rfs.createStream(logFilename, {
interval: '1d', // rotate daily
path: path.resolve(__dirname, '..', 'log'),
});
morgan.token('ip', (req) => req.headers['x-forwarded-for'] || req.connection.remoteAddress);
morgan.token('user', (req) => {
if (req.user) return req.user;
return '-';
});
module.exports = morgan(':ip ":user" [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"', { stream: accessLogStream });
以下は、ログ ファイルで確認できる内容の例です (日付レベルで確認する必要があります)。
2021-10-03-access.log
:ip ":user" [01/Oct/2021:07:30:52 +0000] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"
...
...
:ip ":user" [02/Oct/2021:23:56:26 +0000] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"
2021-10-04-access.log
:ip ":user" [03/Oct/2021:00:01:26 +0000] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"
...
...
:ip ":user" [03/Oct/2021:23:56:26 +0000] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"
2021-10-05-access.log
:ip ":user" [04/Oct/2021:00:01:26 +0000] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"
...
...
:ip ":user" [05/Oct/2021:06:03:02 +0000] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"
回転ファイルストリームのドキュメントで、間隔引数に「1d」を入れると、真夜中ごとに回転することがわかりましたが、何かを忘れたかもしれません。
注意と今後の回答をよろしくお願いします。