Skip to content
Snippets Groups Projects
Commit 8a35aa5f authored by Hoop, Bert Jan de's avatar Hoop, Bert Jan de
Browse files

L05DOCBST-38 add support for multiple handlers

parent 3255adc9
No related branches found
No related tags found
No related merge requests found
......@@ -30,14 +30,42 @@ trait LoggerTrait {
/**
* initialize logger
*
* @param array $settings with (optional) keys: name, path, level and format
* @param string $base_dir base direcory for relative paths
* @param array $settings with (optional) keys: name, handler, path, level and format
* @param string $base_dir base directory for relative paths
* @return $this
*/
public function init_logger(array $settings, string $base_dir = ".") {
$name = isset($settings["name"]) ? $settings["name"] : "default";
$path = isset($settings["path"]) ? $settings["path"] : "php://stderr";
// create the logger
$logger = new \Monolog\Logger($name);
// add handlers
if (isset($settings["handler"])) {
foreach ($settings["handler"] as $handler) {
$this->add_handler($logger, $handler, $base_dir);
}
} else {
// if no handler array the settings
// then the handler parameters are in the settings (backward compatibility)
$this->add_handler($logger, $settings, $base_dir);
}
return $this->set_logger($logger);
}
/**
* initialize logger
*
* @param Monolog\Logger $logger logger instance
* @param array $settings with (optional) keys: path, level and format
* @param string $base_dir base directory for relative paths
* @return $this
*/
protected function add_handler($logger, array $settings, string $base_dir) {
$path = isset($settings["path"]) ? $settings["path"] : "php://stderr";
// adjust log path if it is not a php i/o stream or absolute path
// so only adjust relative paths
if (strncmp($path, 'php:', 4) != 0 && strncmp($path, '/', 1)) {
......@@ -46,18 +74,13 @@ trait LoggerTrait {
$level = isset($settings["level"]) ? $settings["level"] : "info";
$format = isset($settings["format"]) ? $settings["format"] : "[%datetime%] %channel% %level_name% %extra% %context%: %message%";
// create the logger
$logger = new \Monolog\Logger($name);
// add stream handler
$stream = new \Monolog\Handler\StreamHandler($path, $level);
$formatter = new \Monolog\Formatter\LineFormatter("$format\n");
$stream->setFormatter($formatter);
$logger->pushHandler($stream);
return $this->set_logger($logger);
}
/**
* get logger instance
* @return \Psr\Log\LoggerInterface or null if not set
......
......@@ -60,7 +60,41 @@ class LoggerTraitTest extends \PHPUnit_Framework_TestCase {
$this->assertEquals(\Monolog\Logger::toMonologLevel($settings["level"]), $handler->getLevel(), "log handler level");
}
}
/*********** Helper Functions **************/
public function test_init_logger_two_handlers() {
$basedir = "/var/log/local";
$settings = [
"name" => "test-logger",
"handler" => [
[
"path" => "log/test.log",
"expectpath" => "$basedir/log/test.log", // expected path for testing
"level" => "debug",
"format" => "[%datetime%]%level_name% %extra% %context%: %message%", // not testable
],
[
"path" => "php://stdout",
"expectpath" => "php://stdout",
"level" => "warning",
"format" => "[%datetime%]%level_name% %extra% %context%: %message%", // not testable
],
],
];
$testlog = new \Tests\Library\Logger();
$testlog->init_logger($settings, $basedir);
$logger = $testlog->get_logger();
$this->assertEquals($settings["name"], $logger->getName(), "name");
$expects = $settings["handler"];
$handlers = $logger->getHandlers();
$this->assertEquals(count($expects), count($handlers), "number of handlers in settings");
for ($i = 0; $i < count($expects); $i++) {
$expect = $expects[$i];
$handler = array_pop($handlers); // handlers are in reverse order
$this->assertEquals($expect["expectpath"], $handler->getUrl(), "$i: log handler path");
$this->assertEquals(\Monolog\Logger::toMonologLevel($expect["level"]), $handler->getLevel(), "$i: log handler level");
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment