wiem, jest to stara sprawa, ale wpadłem w to również i chcę podzielić się moim rozwiązaniem.
Nawiasy na końcu wierszy dziennika wynikają z tego, jak Monolog LineFormatter
próbuje uzyskać dane w %extra%
. Nawiasy są reprezentacją JSON pustej tablicy.
Aby wyłączyć te nawiasy, skończyło się na konieczności podklasy Monolog\Formatter\LineFormatter
z własnej klasy i zastąpienie jej convertToString($data)
funkcji, dlatego zwraca pusty ciąg jeśli nie ma obecnych danych. Oto moja nowa podklasa:
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));
}
}
Można użyć tej klasy wstrzykując wystąpienie go do monolog klasy procedury obsługi, jak w przykładzie:
$handler = new Monolog\Handler\StreamHandler('/path/to/my/logfile', 'debug');
$handler->setFormatter(new My\Fancy\Monolog\LineFormatter());
$monolog->pushHandler($handler);
Enjoy!
Seldaek oznacza '$ log = new Logger ('LaurentCommand'); $ handler = new StreamHandler ('./ app/logs/LaurentCommand.log'); $ handler-> setFormatter (nowa LineFormatter ("[% datetime%]% channel%.% Level_name%:% message%% context% \ n")); $ log-> pushHandler ($ handler); $ log-> addInfo ("Polecenie startowe", tablica ("nazwa użytkownika" => 'Joe', 'Wiek' => '28')); ' – nevvermind
Działa jak urok. Dzięki :) –