expressを使ってサービスを開始する場合、
デフォルトのログではユーザの細かな情報までは得られないので、
app.jsを編集して、apacheのようなアクセスログにしてみました。
// app.js
app.use(express.favicon());
// remove default logging
// app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
// write access log
app.use(function(req, res, next) {
console.log([
req.headers['x-forwarded-for'] || req.client.remoteAddress,
new Date().toLocaleString(),
req.method,
req.url,
res.statusCode,
req.headers.referer || '-',
req.headers['user-agent'] || '-'
].join('\t')
);
next();
});
app.use(app.router);
// continue ...
ってな感じで、app.routerの前にfunctionを突っ込んで、欲しい情報を抜き出します。
その配列をtab区切りで1つの文字列にしてconsole.logで書き込んでいます。
次に、ログローテート用にスクリプトを書きました。
#!/bin/bash
forever stop /var/www/public_html/app.js
DATE=`date +%Y%m%d`
mv -f /var/www/public_html/log/access.log /var/www/public_html/log/old/access-${DATE}.log
forever start -a -l /var/www/public_html/log/access.log /var/www/public_html/app.js
gzip -f /var/www/public_html/log/old/*.log
基本、ストップ・スタートをしているだけですが、
ログ・ファイルの場所を異動させてgzipしています。
こんな感じでサービス運用しています。
でも、これだと一瞬サービス止まるんですよね。
動かしつつも、ログローテートはこちらを参照。

0 件のコメント:
コメントを投稿