Fixed logging

Broke loggers attached by queuedjobs because it wasn't using the global service.
Since the stderr handler was set to bubble=false, those messages weren't picked up by queuedjobs.
Removed preformatted handler since there's no longer an ability to run this stuff via web
This commit is contained in:
Ingo Schommer 2019-06-05 15:09:58 +12:00
parent 7301b375b8
commit 2d4711de01

View File

@ -2,6 +2,7 @@
namespace SilverStripe\Dev\Tasks; namespace SilverStripe\Dev\Tasks;
use Monolog\Handler\FilterHandler;
use Monolog\Handler\StreamHandler; use Monolog\Handler\StreamHandler;
use Monolog\Logger; use Monolog\Logger;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
@ -243,25 +244,28 @@ TXT;
*/ */
protected function addLogHandlers() protected function addLogHandlers()
{ {
// Create a default logger with a custom name (less misleading than "error-log") // Using a global service here so other systems can control and redirect log output,
$logger = Injector::inst()->create(LoggerInterface::class, 'log'); // for example when this task is run as part of a queuedjob
$logger = Injector::inst()->get(LoggerInterface::class)->withName('log');
if (Director::is_cli()) {
$formatter = new ColoredLineFormatter(); $formatter = new ColoredLineFormatter();
$formatter->ignoreEmptyContextAndExtra(); $formatter->ignoreEmptyContextAndExtra();
// Don't double process WARNING or higher levels in other handlers (bubble=false) $errorHandler = new StreamHandler('php://stderr', Logger::ERROR);
$errorHandler = new StreamHandler('php://stderr', Logger::ERROR, false);
$errorHandler->setFormatter($formatter); $errorHandler->setFormatter($formatter);
$standardHandler = new StreamHandler('php://stdout'); $standardHandler = new StreamHandler('php://stdout');
$standardHandler->setFormatter($formatter); $standardHandler->setFormatter($formatter);
$logger->pushHandler($standardHandler); // Avoid double logging of errors
$standardFilterHandler = new FilterHandler(
$standardHandler,
Logger::DEBUG,
Logger::WARNING
);
$logger->pushHandler($standardFilterHandler);
$logger->pushHandler($errorHandler); $logger->pushHandler($errorHandler);
} else {
$logger->pushHandler(new PreformattedEchoHandler());
}
$this->logger = $logger; $this->logger = $logger;
} }