2024/02/13 22:13:39

MyApp: ログ

一貫したログの管理運用について

アプリケーションログ

ログを扱うモジュール

ログレベル

以下のように分類、運用する。

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
サイト内検索