nDiki : CGI::Carp
スポンサード リンク
Related term
SpeedyCGI WiKicker Perl Log::Log4perl::Appender::Synchronized Log::Log4perl IPC::Semaphore IPC::Shareable エラー nDiki Devel::Size flock FAQ Test::Harness URI::Fetch AppConfig CGI::Session Ming Jcode.pm ExtUtils::FakeConfig Devel::SmallProf WWW::Mechanize::Cached Perl で XML Palm 開発 ファイル名 HTTP::Daemon PAR 標準 Perl ライブラリ Perl モジュールの作り方 PDL::PP
2003年10月19日 (日)
■ [ WiKicker ] SpeedyCGI 対応

苦戦。 メモ。
- [ Perl ] Log::Log4perlのはまりどころ (2004-03-02)
- [ WiKicker ] SpeedyCGI 対応するも…… (2003-11-09)
- SpeedyCGI 以下で WiKicker がうまく動かない? (2006-12-04)
- Windows 上での Apache 2.0.53 では PATH_INF... (2005-04-10)
- WiKicker 0.28 リリース - バグ修正版 (2005-10-06)
2004年3月2日 (火)
■ [ Perl ] Log::Log4perlのはまりどころ

WiKicker / DiKicker の Log::Log4perl 対応作業。
- www.naney.org は Apache の VirtualHost としてエラーログも個別に吐かれている
- エラーログは自分のホームディレクトリに吐かれるものの、root 所有である
- ディレクトリは自分に所有権があり、エラーログが肥大化したら消す事もできるのだが、Apache をリスタートする権利がないので(週に1度のシステム側のローテーションが起きるまで)二度とエラーログが見れなくなる。
ということで、warn -> Apache のエラーログに流れている警告メッセージも、Log::Log4perl の方に流して、好きに消せるようにしておくことにする。
@ Log::Log4perl->init_once
SpeedyCGI 下で動かす事を想定して初期化は、init_once で行うようにする。 可能な限り早く初期化すべきなので、設定ファイル名/設定文字列はプロパティファイルに記述しておくのではなく、CGI プログラムで最初に生成する Controller オブジェクトの初期化パラメータで指定するように。
@ $SIG{__WARN__} を設定
$SIG{__WARN__}を設定して、warn のメッセージを Log::Log4perl に送る。 最初はほぼ FAQ の例のまま、以下のように記述。
use Log::Log4perl qw(:easy);
BEGIN {
$::SIG{__WARN__} = sub {
local $Log::Log4perl::caller_depth = $Log::Log4perl::caller_depth + 1;
WARN(@_);
};
}
しかし期待していた通りに動かず悩む。原因は前述する init_once との絡み。 use Log::Log4perl qw(:easy) した時点でデフォルトの初期化が行われてしまうため、初期化済みになってしまって init_once での設定処理がスキップされていたのが問題。
use Log::Log4perl;
BEGIN {
$::SIG{__WARN__} = sub {
local $Log::Log4perl::caller_depth = $Log::Log4perl::caller_depth + 1;
if (Log::Log4perl->initialized) {
Log::Log4perl->get_logger->warn(@_);
}
};
}
と修正。 get_logger も暗黙的に初期化を行うので、init_once する前に warn されるとやはりデフォルトの初期化がおこってしまう。 それではまずいので initialized が真(=初期化済み)の時のみロギングするようにする。 ただしこれだと init_once する前の warn メッセージが失なわれる(STDERR あたりに print するようにすればいいかもしれない)。
@ CGI::Carpとの絡み
CGI::Carp も $SIG{__WARN__} を上書きするので同時に使えない。 以前に use していたのが残っていてはまる。
@ Log::Log4perl::Appender::Synchronized で core dump ?
NaneyOrgWiki、nDiki でロギングしはじめたところ、CGI プログラムの処理はきちんと成功しているもののその後(?) speedy_backend が core dump してしまう事があるようだ。 最初は $::SIG{__WARN__} の設定あたりに問題があるのかと思ったが、Log::Log4perl::Appender::Synchronized を使わないようにしたところ core を吐かなくなった。
IPC::Shareable、IPC::Semaphoreなんて使っているしやっぱりこれが怪しい。 とりあえず外しておくことにする。
しかし何らかの方法でシンクロしておかないとログファイルが壊れるはずだから、本当はどうにかしなければならないな。 もっと簡単に flock とかで排他制御する Appender とか無いのかな。 自分で書くしかない?
- www.naney.org サーバ断続的にダウン (2006-04-30)
- Windows 上での Apache 2.0.53 では PATH_INF... (2005-04-10)
- サーバ高負荷状態につき DiKicker 機能修正とサーバ設定変更 (2006-03-03)
- [ WiKicker ] SpeedyCGI 対応するも…… (2003-11-09)
- [ WiKicker ] 「最近のアクセスログ」処理思案 (2004-01-17)
■よく検索されるキーワード
torrent(62) windows(62) perl(58) 提案書(48) 書き方(47) linux(44) アジェンダ(32) usb(29) 動画(27) x31(27) 使い方(27) 手帳(25) ssh(25) mp980(23) thinkpad(22) svn(21) ほぼ日手帳(21) java(21) インストール(20) 画像(20) debian(20) ドラマ(16) subversion(16) cvs(15) ubuntu(15) 設定(15) 秋葉原(14) gmail(13) ヨドバシ(13) 無料動画(13) tortoisesvn(13) dropbox(13) c#(12) .net(12) 壁紙(12) make(12) gnu(12) ノート(11) ヨドバシカメラ(11) a6(11) tc-1(11) ganttproject(11) 冷蔵庫(11) 宮根誠司(11) porter(11) 無印(10) フリー(10) 筆まめ(10) tar(10) 充電式カイロ(10) 方眼(9) パスワード(9) 日本語(9) visual(9) cwrsync(9) wiki(9) gimp(9) フォーマット(9) firefox(8) ボールペン(8) nullpointerexception(8) grub(8) skk(8) ppm(8) ご査収(8) ダウンロード(8) ケース(8) サンプル(8) 提案書の書き方(8) 無料(8) 無印良品(8) google(8) 2008(8) gtd(8) 3.5(8) framework(8) ツール(8) cgi(7) mew(7) バッグインバッグ(7)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザイン ビックカメラProcess Time: 0.072638s / load averages: 0.11, 0.20, 0.24
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)



スポンサード リンク