2016-05-12 9 views
2

Ich versuche etwas mit Monolog zu tun, dass ich nicht sicher bin, dass es möglich ist. Also habe ich über eine praktische Möglichkeit nachgedacht, die Log-Dateien zu organisieren.Monolog RotatingFileHandler Speichern in eine bestimmte Datei nach Log-Typ

Zuerst dachte ich, dass ich 3 verschiedene Dateien habe, INFO, WARNING und ERROR, aber es wäre schwierig, ein spezifisches Datum innerhalb der Datei zu suchen. So entschied ich mich, so zu organisieren:

Logs

  • | _ Info | _Year | _12-05-2016.log
  • | _Warning | _Year | _12-05-2016. log
  • | _Error | _Year | _12-05-2016.log

Hier wh Ich entschied mich zu tun

$infoStreamHandler = new \Monolog\Handler\RotatingFileHandler($settings['path_info'].'/info.log', Monolog\Logger::INFO); 
$warningStreamHandler = new \Monolog\Handler\RotatingFileHandler($settings['path_warn'].'/warning.log', Monolog\Logger::WARNING); 
$errorStreamHandler = new \Monolog\Handler\RotatingFileHandler($settings['path_error'].'/error.log', Monolog\Logger::ERROR); 

$logger ->pushHandler($infoStreamHandler); 
$logger->pushHandler($warningStreamHandler); 
$logger->pushHandler($errorStreamHandler); 

Aber das funktioniert nicht wie ich erwartet hatte. Ich versuchte zuerst mit StreamHandler und es funktionierte (aber es war nur eine Datei für alle Daten erstellen), aber sobald ich zu RotatingFileHandler wechselte es die gleiche Warnung in allen 3 Dateien gespeichert, anstatt es nur im Warnprotokoll zu speichern.

Irgendwelche Gedanken?

Vielen Dank im Voraus.

Antwort

1

So habe ich gerade gefunden, was das Problem war. Mir fehlte ein Param, der $maxFiles. $infoStreamHandler = new \Monolog\Handler\RotatingFileHandler($settings['path_info'].'/info.log', 0, Monolog\Logger::INFO);

Und es funktioniert jetzt perfekt!

4

Wenn Sie Ihre Protokolle zu ./path/to/directory/2017/07/21-yournamelog.log dieses teilen wollen, ist, was Sie tun müssen:

$logger = new Logger('chanel-name'); 
$handler = new RotatingFileHandler('./path/to/directory/yournamelog.log', 0, Logger::INFO, true, 0664); 
# '/' in date format is treated like '/' in directory path 
# so Y/m/d-filename will create path: eg. 2017/07/21-filename.log 
$handler->setFilenameFormat('{date}-{filename}', 'Y/m/d'); 
$ogger->pushHandler($handler); 

$array = ["x" => "y"]; 
$logger->addInfo('new message', $array); 

Es wird Protokolldatei im Pfad erstellen: ./path/to/directory/2017/07/21-yournamelog.log mit Inhalt:

[2017-07-21 14:33:49] chanel-name.INFO: new message {"x":"y"} [] 
Verwandte Themen