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

Merge branch 'L05DOCBST-38-multiple-logger-handlers' into prod

* L05DOCBST-38-multiple-logger-handlers:
  L05DOCBST-38 set version 0.2.0
  L05DOCBST-38 add support for multiple handlers
  L05DOCBST-38 add tests for LoggerTrait
  L05DOCBST-38 rename library class directory
parents 0d6fcb8f f50cd9af
No related branches found
Tags v0.2.0
No related merge requests found
......@@ -9,14 +9,14 @@
"homepage": "http://library.wur.nl"
}
],
"version": "0.1.2",
"version": "0.2.0",
"require": {
"php": ">=7.0.0",
"guzzlehttp/guzzle": "^6.3"
},
"autoload": {
"psr-4": {
"Library\\": "src/library"
"Library\\": "src/Library"
}
},
"require-dev": {
......
......@@ -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
......
File moved
<?php
namespace Tests\Library;
class Logger {
use \Library\LoggerTrait;
}
class LoggerTraitTest extends \PHPUnit_Framework_TestCase {
public function test_default_init_logger() {
$testlog = new \Tests\Library\Logger();
$this->assertNull($testlog->get_logger(), "no logger without init_logger()");
$testlog->init_logger([]);
$logger = $testlog->get_logger();
$this->assertInstanceOf("\Monolog\Logger", $logger, 'get_logger() returns instance of \Monolog\Logger');
$this->assertEquals("default", $logger->getName(), "default name");
$handlers = $logger->getHandlers();
$this->assertEquals(1, count($handlers), "default logger has 1 handler");
$handler = $handlers[0];
$this->assertInstanceOf("\Monolog\Handler\StreamHandler", $handler, 'default log handler is a StreamHandler');
$this->assertEquals("php://stderr", $handler->getUrl(), "default log handler path (url)");
$this->assertEquals(\Monolog\Logger::toMonologLevel("info"), $handler->getLevel(), "default log handler level is 'info'");
$formatter = $handler->getFormatter();
$this->assertInstanceOf("\Monolog\Formatter\LineFormatter", $formatter, 'default log handler formatter is a LineFormatter');
}
public function test_init_logger_single_handler() {
$settings = [
"name" => "test-logger",
"path" => "log/test.log",
"level" => "debug",
"format" => "[%datetime%]%level_name% %extra% %context%: %message%", // not testable
];
$testlog = new \Tests\Library\Logger();
$testlog->init_logger($settings);
$logger = $testlog->get_logger();
$this->assertEquals($settings["name"], $logger->getName(), "name");
$handlers = $logger->getHandlers();
$this->assertEquals(1, count($handlers), "logger has 1 handler");
$handler = $handlers[0];
$this->assertEquals("./" . $settings["path"], $handler->getUrl(), "log handler path (with default basedir)");
$this->assertEquals(\Monolog\Logger::toMonologLevel($settings["level"]), $handler->getLevel(), "log handler level");
$basedir = "/var/log/local";
$testlog = new \Tests\Library\Logger();
$testlog->init_logger($settings, $basedir);
$logger = $testlog->get_logger();
$this->assertEquals($settings["name"], $logger->getName(), "name");
$handlers = $logger->getHandlers();
$this->assertEquals(1, count($handlers), "logger has 1 handler");
$handler = $handlers[0];
$this->assertEquals("$basedir/" . $settings["path"], $handler->getUrl(), "log handler path (with passed basedir)");
$this->assertEquals(\Monolog\Logger::toMonologLevel($settings["level"]), $handler->getLevel(), "log handler level");
}
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");
}
}
}
File moved
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