0

すべてのクラスに独自の .log ファイルを作成できるようにしたいと考えています。
config/main.php ファイルでこれを手動で実行したくありませんが
、別のパラメーターを使用してログ関数に送信することは可能ですか (おそらく何らかの形で継承します)?

4

2 に答える 2

1

それは可能ですが、いくつかのコードを記述する必要があります。具体的には、次のことを行う必要があります。

独自の実装を作成する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...
    ),
),
于 2013-03-05T10:33:09.977 に答える
0

最も近い方法は、CLogFilter を拡張して、現在のクラス/ファイル名に関する追加情報をログに追加することです。

http://www.yiiframework.com/doc/guide/1.1/en/topics.logging#logging-context-information

于 2013-03-05T10:12:36.657 に答える