2.1.0前置き表題にCodeIgniterと書きましたが、概念的にはこのフレームワークだからという話ではないです。前回の続きと言うことで。デフォルトでログは以下のように吐かれます。endまあ、ざっくりこのログが何を表しているかというと、土曜の夜だというのにデバッグしてるMVCモデルのControllerの部分に要求がきて、その中のメソッドを開始し、idの値判定して結果をログへ出力。正常にメソッドを抜けてendといった感じを表しています。自分で作り込んでいれば、上記では割愛した前後のログでおよその見当は付くでしょうが、ぱっと見どこの処理かわからないですね。これにクラス名やメソッド名、行番号が表示されていれば、前後を確認しなくとも1発でどこの処理か判断する事ができるのではないでしょうか。Manualhttp://www.php.net/manual/ja/function.debug-backtrace.phpこの関数を叩けば、呼び出し元のクラス名やら行番号が参照できます。いう事で、前回社畜仕様にカスタマイズしたファイルに埋め込めばOK。はい解決!と行きたいところですが、少し挙動を見てみましょう。var_dump(debug_backtrace());という記述をしてやります。呼び出し元となる、テスト用のControllerを作成してやります。}}ブラウザから呼んで、1回の処理でどれだけ戻り値があるか実験してみます。こんな感じでたくさんの配列の中身が表示されます。これらをコピーしてテキストに保存してサイズを見ると、160KBなかなか大きいサイズじゃないですか。worldとログに出力するだけでこのサイズの戻り値の文字があるわけです。これが、何行もログを出力し、同時に複数のアクセスがある事を考えると、脇役のログが結構な負荷になるのではないでしょうか?そんなにアクセスないから安心しろ。言え、160KBと言われても、戻り値の配列を文字で表示したサイズですし、PHPの中身がどうなっててメモリをどう使ってるのかわからないので”大きいサイズ”と言いましたが感覚的なものです。ブラウザに表示すると重くなるデータサイズはちと見逃せねーなーといった感じです。worldの部分へ埋め込めば良いでしょう。Manualhttp://php.benscom.com/manual/ja/language.constants.predefined.phpしかし、捕らぬアクセスのレスポンス算用を今のうちにして、パフォーマンス重視の見づらいコードになるくらいなら、バグを埋め込まないためにもスッキリさせておきたいので、仲介の関数(ラッパー関数)を間に挟んでみます。world');CodeIgniterのヘルパー関数として実装します。日本語版http://codeigniter.jp/user_guide_ja/general/helpers.htmlまず、ヘルパー関数を記述するファイルを作成します。ファイル名の末尾は「_helper.php」となるようにします。}?>まずは、上記のMY_Log.phpと比較できるよう、print_r(debug_backtrace());を実装しておきます。これをどこからでも呼べるよう、「application/config/autoload.php」に登録します。こちらでは、ファイル名の「_helper.php」は必要ありません。array('mylogwrap');これで先ほどのControllerでこの関数を呼ぶようにして実験をしてみます。}}約27KBで仲介させた関数の方が約1/6小さい!ということで明らかに効果がありますね。フレームワーク自体のログが出なくなる事もあり、当たり前ですが。できればByte単位にしたいところですが、コレでいきたいと思います。これを表題の通りに表示させるべく、debug_backtrace関数の戻り値から必要な情報を取得し、関数を修正・整理してみたのが以下です。クラス名を表示させるので呼び出し元はクラス限定という縛りで。この関数が直接呼ばれた場合と、同ファイル内から呼ばれた場合でバックトレースの取得位置を分岐。}?>パラメータとして記述していたdebugやerrorというレベル値は、その分対応する関数としました。これならNetBeansとかのIDEなら実行前にエラーだとわかるのではないでしょうか?試してないのでわかりませんが。共通的に処理するloggerを設けてます。本当はloggerはプライベートな関数としたいところですが、そうもいかないので、直接呼ばれた場合と同ファイルから呼ばれた場合で分岐させましました。CodeIgniter");のように書けば「application/logs」ディレクトリへログが出力されますが、ファイル名がlog-2012-02-14.phplog-2012-02-15.phplog-2012-02-16.phplog-2012-02-17.phpという日付単位になっているため、tailコマンド等でログを追っていると日付を超えた瞬間ログが出力されなくなります。日付を超えて作業をしているような社畜にとってはありがたくない仕様です。ノリノリでコーディングをしていても、ログが出なくなる異変に気付き、今日の日付のファイル名でtailコマンドを打ち直すというちょっとした作業により、毎晩遅くまでご苦労さんwwと日付が変った事を思い知らせてくれるドS仕様にやる気をくじかれるわけです。これはいかんという事で、ログファイル名は固定で、あるサイズを超えるとアーカイブを作る(リネーム)するように変更したいと思います。言え、CodeIgniterでログをカスタマイズするのはググればたくさん出てくると思うので、そちらを参考にしてもらう方が良いかもしれませんが、ファイルサイズをチェックしてリネームするかどうとか、config.phpいじるとか一連の流れを覚えておきたいのでメモしておきます。実装はsystemディレクトリ内にある「system/libraries/Log.php」というファイルです。日本語版http://codeigniter.jp/user_guide_ja/general/core_classes.htmlコアシステムのクラスをユーザバージョンのクラスと置き換えたり、コアシステムのクラスを拡張したりすることもできます。Log.phpはライブラリのファイルですが置き換えたいと思います。コピーapplication/libraries/MY_Log.phpとして配置この頭の「MY_」が置き換えの味噌のようです。MY_Log.phpのクラス名を以下のように修正。{これでカスタマイズ用のファイルが完成です。コンフィグからファイル名とファイルサイズ上限を取ってくる前仕様では日付をファイル名にしてるので、Log.phpはログを出力するパスだけ知ってれば良かったのですが、ファイル名を指定してやりたいのでconfig.phpから取得させるようにしたいと思います。冒頭のコンフィグのコードが書かれてる下あたりに記述してやればOKでしょう。921600;サイズは適当に900KBにしています。根拠は特にありません。ログファイルをサイズ単位で出力するようにするMY_Log.phpのwrite_logメソッド内の85行目~98行目あたりを修正しました。ファイルが切り詰められましと表示されますが、再度コマンドを打つ事なくログを追う事ができます。付け足すとするなら、前仕様でもそうですが、永遠とログを吐き続けるので運用段階では古いファイルを削除するような実装も欲しいですね。ログのバックアップを取って消すというトリガーでも良いかもしれませんが。これで今夜から快適なログ出力ライフにのぞめます。件のコメントコメント欄で思いがけず見つけたので、メモ。time);上記赤文字の通りに使えば良いのですが、メソッド自身を繰り返し呼んでブラウザに時計のように表示するサンプルを以下に。人気の記事Eclipseの高速化メモEclipseが重いと一言に言っても、いろいろな工程での話があると思いますが、過去記事のなども含めてこの記事にピックアップしておきたいと思います。以下はWindows環境での話です。JavaでprivateなfieldやmethodにアクセスするJUnitでテストしてると、privateなフィールドにアクセスして、値を参照したりセットしたりしたくなるわけですが、よく使うのでメモしておきます。次のような対象のクラスがあるとします。...Androidのlogcatを自動で保存させたいEclipseのlogcatビューは、いらないログはすぐ消してしまうので、さっきのログをもう一度見たいという時に、どこかに残ってないかなと思うことが時々あります。Sh...Eclipseで一通り基本的なGitを使ってみる備忘録的にまとめておきたいと思います。おかしな点があればご指摘いただければ幸いです。