Ich weiß, dass dies eine alte Frage, aber ich lief hinein und ich möchte meine Lösung teilen.
Die Klammern am Ende der Protokollzeilen sind darauf zurückzuführen, wie Monolog LineFormatter
versucht, json_encode()
die Daten in %extra%
. Die Klammern sind eine JSON-Darstellung eines leeren Arrays.
Um diese Klammern zu deaktivieren, musste ich Monolog\Formatter\LineFormatter
mit meiner eigenen Klasse ableiten und seine convertToString($data)
Funktion überschreiben, so dass es eine leere Zeichenfolge zurückgibt, wenn keine Daten vorhanden sind. Hier ist meine neue Unterklasse:
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));
}
}
Sie können diese Klasse verwenden, indem Sie eine Instanz davon in Ihre Monolog-Handler-Klasse injizieren, etwa so:
$handler = new Monolog\Handler\StreamHandler('/path/to/my/logfile', 'debug');
$handler->setFormatter(new My\Fancy\Monolog\LineFormatter());
$monolog->pushHandler($handler);
Viel Spaß!
Seldaek bedeutet '$ log = new Logger ('LaurentCommand'); $ handler = neuer StreamHandler ('./ app/logs/LaurentCommand.log'); $ handler-> setFormatter (neuer LineFormatter ("[% datetime%]% channel%.% Level_name%:% message%% context% \ n")); $ log-> pushHandler ($ handler); $ log-> addInfo ("Startbefehl", Array ('Benutzername' => 'Joe', 'Alter' => '28')); ' – nevvermind
Funktioniert wie ein Zauber. Vielen Dank :) –