public static function factory($loggerNode)
    {

        // initialize the processors
        $processors = array();
        /** @var \AppserverIo\Appserver\Core\Api\Node\ProcessorNode $processorNode */
        foreach ($loggerNode->getProcessors() as $processorNode) {
            $reflectionClass = new \ReflectionClass($processorNode->getType());
            $processors[] = $reflectionClass->newInstanceArgs($processorNode->getParamsAsArray());
        }

        // initialize the handlers
        $handlers = array();
        /** @var \AppserverIo\Appserver\Core\Api\Node\HandlerNode $handlerNode */
        foreach ($loggerNode->getHandlers() as $handlerNode) {
            // initialize the handler node
            $reflectionClass = new \ReflectionClass($handlerNode->getType());
            $handler = $reflectionClass->newInstanceArgs($handlerNode->getParamsAsArray());

            // if we've a formatter, initialize the formatter also
            if ($formatterNode = $handlerNode->getFormatter()) {
                $reflectionClass = new \ReflectionClass($formatterNode->getType());
                $handler->setFormatter($reflectionClass->newInstanceArgs($formatterNode->getParamsAsArray()));
            }

            // add the handler
            $handlers[] = $handler;
        }

        // prepare the logger params
        $loggerParams = array($loggerNode->getChannelName(), $handlers, $processors);
        $loggerParams = array_merge($loggerParams, $loggerNode->getParamsAsArray());

        // initialize the logger instance itself
        $reflectionClass = new \ReflectionClass($loggerNode->getType());
        $loggerInstance = $reflectionClass->newInstanceArgs($loggerParams);

        // return the instance
        return $loggerInstance;
    }