MyApp: ログ
一貫したログの管理運用について
アプリケーションログ
ログを扱うモジュール
- Plack::Middleware::LogDispatch / Log::Dispatch
- conf/log.pl
- Baya::Util::Log
ログレベル
以下のように分類、運用する。
critical
- 直ちに対応/確認が必要なもの
- 直ちに対応が必要ではないものを critical にしてはいけない
- critical になったものは即刻、直ちに、できる限り早く対応しなければいけない
error
- 異常ではあるが、直ちに対応が必要ではないもの
- 発生数が一定量を超えたら対応(確認)が必要になるようなものを error とする
- 一定間隔での監視の仕組みが必要
warn
- 起きるべくして起きる異常(理由も結果も明らか)は warn とする
- 異常なので記録はするが、対応はほぼ必要ないもの
- error よりはゆるい間隔で監視する
info
- 正常系動作でも、情報を記録として残すべきは info とする
- なにか起きた時は、案外 info がものを言う
debug
- 開発段階でのみ出力するログ
- 存外、使わない
その他の記録
- それ、必要?
- 迷惑かけないように吐いてね
ログを記録する実装
$c->log('log message', 'level')
level default: debug
Baya の Context に実装されたメソッド。conf/log.pl に沿ったログを吐く。
$c->logger('log message', 'level')
level default: info
アプリケーションで利用する。MyApp::Plugin::WebLog で実装。内部的には $c->log を呼んでいる。
以下のような情報が自動的に付与される。
- HTTP METHOD
- REQUEST PATH and QUERY
- IP
- UA
- REFERRER
- Log した位置
Baya::Util::Log; log('log file path', 'log message', 'level')
level default: info
アプリケーション以外のバッチなどで log する場面で使用する。
ログの場所
- data/log 以下にすべて置く
- data/log/daemontools
ログのローテート
~/bin/batch/cron/app_logrotate.sh
ログの parser
TODO
nginx ログ
- 場所: /usr/local/nginx/log/
- 集計: bin/batch/stats_nginx_log.pl
- ローテート: ~/bin/cron/nginx_logrotate.sh