私はこれが古い質問ですけど、私は走りましたそれにも私のソリューションを共有したいと思います。
ログラインの末尾にある括弧は、Monologのがjson_encode()
のデータを%extra%
にどのように格納しようとしているかによって決まります。角括弧は、空の配列のJSON表現です。
これらの角括弧をオフにするには、Monolog\Formatter\LineFormatter
を自分のクラスでサブクラス化し、convertToString($data)
関数を上書きする必要がありました。データがない場合は空の文字列を返します。ここに私の新しいサブクラスです:
namespace My\Fancy\Monolog;
use Monolog\Formatter\LineFormatter;
class LineFormatter extends LineFormatter {
protected function convertToString($data)
{
if (null === $data || is_scalar($data)) {
return (string) $data;
}
// BEGIN CUSTOM CODE - This section added to prevent empty
// brackets from appearing at the end of log lines:
if ((is_array($data) && !$data)
|| is_object($data) && !get_object_vars($data)) {
return '';
}
// END CUSTOM CODE
$data = $this->normalize($data);
if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
return $this->toJson($data);
}
return str_replace('\\/', '/', json_encode($data));
}
}
あなたはそうのように、あなたのモノローグハンドラクラスにそれのインスタンスを注入することにより、このクラスを使用することができます。
$handler = new Monolog\Handler\StreamHandler('/path/to/my/logfile', 'debug');
$handler->setFormatter(new My\Fancy\Monolog\LineFormatter());
$monolog->pushHandler($handler);
お楽しみください!
Seldaekは '$ログ=新しいロガー( 'LaurentCommand')を意味します。 $ handler = new StreamHandler( './ app/logs/LaurentCommand.log');$ handler-> setFormatter(新しいLineFormatter( "[%datetime%]%チャネル%。%レベル名%:%メッセージ%%コンテキスト%\ n")); $ log-> pushHandler($ handler); $ log-> addInfo( "Start command"、array( 'username' => 'Joe'、 'Age' => '28')); ' – nevvermind
チャームのように動作します。ありがとう:) –