3

Zend Framework 2 からログ エントリを MySQL データベースに保存したいと考えています。ライターを使用Zend\Log\Loggerしています。Zend\Log\Writer\Dbライターに配列を提供することで、どの列にどのデータを保存するか (たとえば、タイムスタンプを「log_date」列に保存する)、およびどのデータを保存するかを選択できます。これが私がやっていることです:

$logger = new Zend\Log\Logger();

$mapping = array(
    'timestamp' => 'timestamp_column',
    'priority'  => 'priority_column',
    'message'   => 'message_column',
    'extra' => 'extra_column'
);

$logger->addWriter(new Zend\Log\Writer\Db($dbAdapter, 'table_name', $mapping));
$logger->err('some message', array('some extra information'));

私が直面している問題は、列名とその値の配列に、「余分な」列の列名が正しくないことです。上記の配列に基づいて、値「some extra information」を「extra_column」列に挿入する必要があります。問題は、Zend\Log\Writer\Dbクラスが余分な列の名前として文字「e」を使用していることです。これは、上記の配列の「extra_column」の最初の文字に由来します。何らかの理由で、「extra_column」の最初の文字を取得し、値全体ではなく列名として使用しています。

ソースコードを見てみました。このmapEventIntoColumnメソッドは、列名と値を配列として取得するために使用されています。以下のメソッドの関連部分をコピーしました。

// Example:
// $event = array('extra' => array(0 => 'some extra information'));
// $columnMap = array('extra' => 'extra_column');
// Return: array('e' => 'some extra information')
// Expected (without looking at the code below): array('extra_column' => 'some extra information')
protected function mapEventIntoColumn(array $event, array $columnMap = null) {
    $data = array();
    foreach ($event as $name => $value) {
        if (is_array($value)) {
            foreach ($value as $key => $subvalue) {
                if (isset($columnMap[$name][$key])) {
                    $data[$columnMap[$name][$key]] = $subvalue;
                }
            }
        }
    }
    return $data;
}

パラメータは、最初のコード スニペットの配列$eventと同じキーと$mappingログ メッセージの値を含む配列です。$columnMapパラメータは、最初のコード スニペットの配列$mappingです (配列値は列名です)。

実際に起こっているように見えるのは、余分な情報を配列として渡しているため (これは必須です)、内側の foreach ループが実行されることです。ここで$keyは 0 (インデックス) であるため、実際には次のようになっています$columnMap['extra'][0]。これにより、列名として使用される文字「e」(「extra_column」の最初の文字)が得られますが、代わりに列名全体にする必要があります。

log メソッドを呼び出すときに、余分な配列に独自のキーを指定しようとしましたが、同じことが起こります。公式ドキュメントには、余分なパラメーターの使用例は示されていません。エラーのデバッグに役立つ情報をテーブルに挿入したいので、使用したいと思います。

これはバグですか、それとも何か不足していますか? 私には本当に奇妙に思えます!私はそれを十分に説明したと思います - それはかなりトリッキーです!

4

1 に答える 1

2

Daniel M はまだ回答としてコメントを投稿していないため、問題を解決した彼のコメントを参照します。

于 2013-02-07T18:59:36.367 に答える