すべてのクラスに独自の .log ファイルを作成できるようにしたいと考えています。
config/main.php ファイルでこれを手動で実行したくありませんが
、別のパラメーターを使用してログ関数に送信することは可能ですか (おそらく何らかの形で継承します)?
2 に答える
それは可能ですが、いくつかのコードを記述する必要があります。具体的には、次のことを行う必要があります。
独自の実装を作成するCLogRoute
標準CFileLogRoute
では、ログ メッセージを 1 つのファイルに書き込みます。コードを適応させて独自のコードを作成することは難しくありません。たとえばOneFilePerClassLogRoute
、それは必要なことを行います。たとえば、processLogs
メソッドの実装は次で始まります
protected function processLogs($logs)
{
$logFile=$this->getLogPath().DIRECTORY_SEPARATOR.$this->getLogFile();
// ...
{
パラメータ$logs
は配列です。各アイテムは、4 つの情報を含む配列です ( を見れば、それらが何であるかがわかりますformatLogMessage
)。これらの 1 つは、各メッセージの「カテゴリ」です。カテゴリにクラス名を使用processLogs
し、各メッセージをそのカテゴリ (つまり、関連するクラス) に基づいて別のファイルに書き込むことができます。
必要な情報をロガーに渡す
もちろん、これを行うには、現在のクラス名を各ログ メッセージのカテゴリとして渡す必要があります。幸いなことに、これは__CLASS__
マジック定数を使用すると非常に簡単です。
Yii::log($message, $level, __CLASS__);
ログ ルートを使用するように Yii を構成する
最後に、ドキュメントに示されているように、カスタム ログ ルートで Yii を構成することを忘れないでください。ログ ルート クラスの書き方によっては、次のようになります。
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'MyCustomLogRoute',
'logPath'=>'where_your_logs_will_be_saved',
//...other options for your custom route here...
),
// ...other routes here...
),
),
最も近い方法は、CLogFilter を拡張して、現在のクラス/ファイル名に関する追加情報をログに追加することです。
http://www.yiiframework.com/doc/guide/1.1/en/topics.logging#logging-context-information