From 7573fa3148cf4ef99075e5373e40b776c0939f17 Mon Sep 17 00:00:00 2001
From: Joas Schilling <coding@schilljs.com>
Date: Thu, 5 Jan 2017 12:47:27 +0100
Subject: [PATCH] Handle log_type "nextcloud" more gracefully

Signed-off-by: Joas Schilling <coding@schilljs.com>
---
 lib/private/Log.php    | 27 ++++++++++++++++++++++-----
 lib/private/Server.php |  5 ++---
 2 files changed, 24 insertions(+), 8 deletions(-)

diff --git a/lib/private/Log.php b/lib/private/Log.php
index ef1b70d3cb9..af0ca140cb9 100644
--- a/lib/private/Log.php
+++ b/lib/private/Log.php
@@ -106,12 +106,8 @@ class Log implements ILogger {
 
 		// FIXME: Add this for backwards compatibility, should be fixed at some point probably
 		if($logger === null) {
-			// TODO: Drop backwards compatibility for config in the future
 			$logType = $this->config->getValue('log_type', 'file');
-			if($logType==='owncloud') {
-				$logType = 'file';
-			}
-			$this->logger = 'OC\\Log\\'.ucfirst($logType);
+			$this->logger = static::getLogClass($logType);
 			call_user_func(array($this->logger, 'init'));
 		} else {
 			$this->logger = $logger;
@@ -327,4 +323,25 @@ class Log implements ILogger {
 		$msg .= ': ' . json_encode($exception);
 		$this->error($msg, $context);
 	}
+
+	/**
+	 * @param string $logType
+	 * @return string
+	 * @internal
+	 */
+	public static function getLogClass($logType) {
+		// TODO: Drop backwards compatibility for config in the future
+		switch (strtolower($logType)) {
+			case 'owncloud':
+			case 'nextcloud':
+				$logType = 'file';
+		}
+		$logClass = 'OC\\Log\\' . ucfirst($logType);
+
+		if (!class_exists($logClass)) {
+			$logClass = 'OC\\Log\\File';
+		}
+
+		return $logClass;
+	}
 }
diff --git a/lib/private/Server.php b/lib/private/Server.php
index 5bc72e3614f..a2a2eb607fc 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -418,9 +418,8 @@ class Server extends ServerContainer implements IServerContainer {
 			);
 		});
 		$this->registerService('Logger', function (Server $c) {
-			$logClass = $c->query('AllConfig')->getSystemValue('log_type', 'file');
-			// TODO: Drop backwards compatibility for config in the future
-			$logger = 'OC\\Log\\' . ucfirst($logClass=='owncloud' ? 'file' : $logClass);
+			$logType = $c->query('AllConfig')->getSystemValue('log_type', 'file');
+			$logger = Log::getLogClass($logType);
 			call_user_func(array($logger, 'init'));
 
 			return new Log($logger);
-- 
GitLab