9

私は Laravel に慣れていませんが、Monolog ベースのロギングを使用すると、たとえばLog::info('blah blah')、ログファイルに書き込まれる行の末尾に空の角括弧が 2 つ付いていることに気付きました。それらは何のためにあり、どうすればオフにできますか? それらは少しも役に立ちません。ソースコードを掘り下げてググってみましたが、説明がありません。

例:

[2013-11-12 09:13:16] log.INFO: Hello world [] []

[2013-11-12 09:13:31] log.INFO: 私の愚かなログ メッセージ [] []

ありがとう!

4

3 に答える 3

8

これは、curtisdf の回答と Seldaekによるこの回答を組み合わせたソリューションであり、Monolog のサブクラス化を必要としませんLineFormatter

app/start/global.phpファイルに次のものが含まれていると仮定します。

Log::useFiles(storage_path() . '/logs/laravel.log');

それを次のように置き換えます。

use Monolog\Handler\StreamHandler;
use Monolog\Logger as MonologLogger;
use Monolog\Formatter\LineFormatter;

// Use custom LineFormatter, with ignoreEmptyContextAndExtra enabled
Log::getMonolog()->pushHandler(
    (new StreamHandler(
        storage_path() . '/logs/laravel.log',
        MonologLogger::DEBUG
    ))->setFormatter(new LineFormatter(null, null, true, true))
);
于 2015-01-09T13:09:36.310 に答える
5

さらに調査した結果、これは で発生することがわかりましたMonolog\Formatter\LineFormatter。つまり、括弧は空の配列の JSON 表現です。残念ながら、Laravel がこの問題から抜け出す簡単な方法を提供しているようには見えないため、Monolog をサブクラス化することになりました。詳細はこの SO postに投稿しました。LineFormatterしかし、その投稿は Laravel 固有のものではないため、Laravel コンテキストでそのようなカスタムを使用する方法を共有したいと思います。

app/start/global.phpは、デフォルトでロギングを定義するセクションがあります。次のようになります。

Log::useDailyFiles(storage_path().'/logs/log-'.php_sapi_name().'.txt');

これを次のように置き換えます。

$handler = new Monolog\Handler\StreamHandler(
    storage_path().'/logs/log-'.php_sapi_name().'.txt');
$handler->setFormatter(new My\Fancy\Monolog\LineFormatter());
Log::getMonolog()->pushHandler($handler);

楽しみ!

于 2013-11-12T18:44:18.860 に答える