silverstripe-fulltextsearch/code/utils/logging/MonologFactory.php
Damian Mooyman 1683f776bd API QueuedJob support for Solr_Reindex
API Incremental clear and re-index of records rather than clearing all records from SolrIndex up front
2015-07-28 12:46:23 +12:00

99 lines
2.4 KiB
PHP

<?php
use Monolog\Formatter\FormatterInterface;
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\HandlerInterface;
use Monolog\Logger;
/**
* Provides logging based on monolog
*/
class MonologFactory implements SearchLogFactory {
public function getOutputLogger($name, $verbose) {
$logger = $this->getLoggerFor($name);
$formatter = $this->getFormatter();
// Notice handling
if($verbose) {
$messageHandler = $this->getStreamHandler($formatter, 'php://stdout', Logger::INFO);
$logger->pushHandler($messageHandler);
}
// Error handling. buble is false so that errors aren't logged twice
$errorHandler = $this->getStreamHandler($formatter, 'php://stderr', Logger::ERROR, false);
$logger->pushHandler($errorHandler);
return $logger;
}
public function getQueuedJobLogger($job) {
$logger = $this->getLoggerFor(get_class($job));
$handler = $this->getJobHandler($job);
$logger->pushHandler($handler);
return $logger;
}
/**
* Generate a handler for the given stream
*
* @param FormatterInterface $formatter
* @param string $stream Name of preferred stream
* @param int $level
* @param bool $bubble
* @return HandlerInterface
*/
protected function getStreamHandler(FormatterInterface $formatter, $stream, $level = Logger::DEBUG, $bubble = true) {
// Unless cli, force output to php://output
$stream = Director::is_cli() ? $stream : 'php://output';
$handler = Injector::inst()->createWithArgs(
'Monolog\Handler\StreamHandler',
array($stream, $level, $bubble)
);
$handler->setFormatter($formatter);
return $handler;
}
/**
* Gets a formatter for standard output
*
* @return FormatterInterface
*/
protected function getFormatter() {
// Get formatter
$format = LineFormatter::SIMPLE_FORMAT;
if(!Director::is_cli()) {
$format = "<p>$format</p>";
}
return Injector::inst()->createWithArgs(
'Monolog\Formatter\LineFormatter',
array($format)
);
}
/**
* Get a logger for a named class
*
* @param string $name
* @return Logger
*/
protected function getLoggerFor($name) {
return Injector::inst()->createWithArgs(
'Monolog\Logger',
array(strtolower($name))
);
}
/**
* Generate handler for a job object
*
* @param QueuedJob $job
* @return HandlerInterface
*/
protected function getJobHandler($job) {
return Injector::inst()->createWithArgs(
'QueuedJobLogHandler',
array($job, Logger::INFO)
);
}
}