2

スコープが soap のメッセージのみがそのファイルに記録されるように、ログ ファイルを設定したいと思います。逆に、デバッグとエラーのデフォルト ログに対して、soap のスコープを持つメッセージがログに記録されないようにしたいと考えています。

これがbootstrap.phpの現在の設定です。

CakeLog::config('soap', array(
    'engine' => 'FileLog',
    'types' => array('info','debug','error'),
    'scopes' => array('soap'),
    'file' => 'soap'
));

CakeLog::config('debug', array(
    'engine' => 'FileLog',
    'types' => array('notice', 'info', 'debug'),
    'file' => 'debug',
));
CakeLog::config('error', array(
    'engine' => 'FileLog',
    'types' => array('warning', 'error', 'critical', 'alert', 'emergency'),
    'file' => 'error',
));

これは、soap 呼び出しを行うライブラリの 1 つからのスニペットです。

        CakeLog::debug("REQUEST:\n" . $client->__getLastRequest() . "\n", 'soap');
        CakeLog::debug("RESPONSE:\n" . $client->__getLastResponse() . "\n", 'soap');

    } catch (SoapFault $e) {
        CakeLog::error(print_r($result,true), 'soap');
        CakeLog::error('Exception: (' . $e->getCode() . ') ' . $e->getMessage(), 'soap');
        if (isset($client)) {
            CakeLog::error("Errored REQUEST:\n" . print_r($client->__getLastRequest(), true) . "\n", 'soap');
        }

この現在の設定を行うと、debug.log と soap.log にデバッグ ソープ メッセージが表示されますが、これは望ましくありません。

4

3 に答える 3

4

CakeLog::config ドキュメントによると

スコープを定義しない場合、アダプタは処理されたレベルに一致するすべてのスコープをキャッチします。

したがって、デバッグロガーはすべてのメッセージを次のタイプで書き込みます'types' => array('notice', 'info', 'debug'),

ではどうすれば回避できるのでしょうか。あなたには2つの方法があるようです:

  • カスタムエラータイプで CakeLog::write を使用する

    CakeLog::write('soap', "REQUEST:\n" . $client->__getLastRequest() . "\n");

この場合、CakeLog::write メソッドのドキュメントに従って

integer|string $type 書き込まれるメッセージのタイプ。値が認識されたレベルに一致する整数または文字列の場合、ログ レベルとして扱われます。それ以外の場合は、スコープとして扱われます。

スコープとタイプは同じで、「soap」値を持つため、メッセージはデバッグ ロガーには記録されず、soap にのみ記録されます。

  • すべてのデバッグ メッセージを 1 つのファイルに保存し、いくつかのメッセージをいくつかの特定のログに保存するのはそれほど悪い考えではありません。
于 2013-06-27T02:30:22.520 に答える