# MyApp: ログ ## 一貫したログの管理運用について {{TOC 3-}} ### アプリケーションログ #### ログを扱うモジュール * {{cpan: Plack::Middleware::LogDispatch}} / {{cpan: 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