diff --git a/src/Library/LoggerTrait.php b/src/Library/LoggerTrait.php
index e1e62f08433b8d75815e48f588916cb02e584fb1..6a4f5ec8ebf8fd345cba6d55bac29896d18d9f98 100644
--- a/src/Library/LoggerTrait.php
+++ b/src/Library/LoggerTrait.php
@@ -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
diff --git a/tests/Library/LoggerTraitTest.php b/tests/Library/LoggerTraitTest.php
index ac19cdaa3d446e8871d1d4b0645eedd9de84ba67..3ef99a2cfad99bb2e75fc84e6408f519f933b991 100644
--- a/tests/Library/LoggerTraitTest.php
+++ b/tests/Library/LoggerTraitTest.php
@@ -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");
+        }
+    }
 
+}