From 3fd2df4088d17547a3a31023a75cf538c95ade18 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Wed, 28 Aug 2013 17:41:27 +0200
Subject: [PATCH] Only enable logrotate when configured. Also rotate size is
 settable.

---
 config/config.sample.php | 15 ++++++++++++---
 lib/base.php             |  3 ++-
 lib/log/rotate.php       | 16 +++++++++-------
 3 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/config/config.sample.php b/config/config.sample.php
index 24ba541ac5c..f5cb33732f8 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -141,10 +141,22 @@ $CONFIG = array(
 /* Loglevel to start logging at. 0=DEBUG, 1=INFO, 2=WARN, 3=ERROR (default is WARN) */
 "loglevel" => "",
 
+/* date format to be used while writing to the owncloud logfile */
+'logdateformat' => 'F d, Y H:i:s',
+
 /* Append all database queries and parameters to the log file.
  (watch out, this option can increase the size of your log file)*/
 "log_query" => false,
 
+/*
+ * Configure the size in bytes log rotation should happen, 0 or false disables the rotation.
+ * This rotates the current owncloud logfile to a new name, this way the total log usage
+ * will stay limited and older entries are available for a while longer. The
+ * total disk usage is twice the configured size.
+ * WARNING: When you use this, the log entries will eventually be lost.
+ */
+'log_rotate_size' => false, // 104857600, // 100 MiB
+
 /* Lifetime of the remember login cookie, default is 15 days */
 "remember_login_cookie_lifetime" => 60*60*24*15,
 
@@ -189,7 +201,4 @@ $CONFIG = array(
 'customclient_desktop' => '', //http://owncloud.org/sync-clients/
 'customclient_android' => '', //https://play.google.com/store/apps/details?id=com.owncloud.android
 'customclient_ios' => '', //https://itunes.apple.com/us/app/owncloud/id543672169?mt=8
-
-// date format to be used while writing to the owncloud logfile
-'logdateformat' => 'F d, Y H:i:s'
 );
diff --git a/lib/base.php b/lib/base.php
index f45012bb83c..2e6a37c9f4e 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -557,7 +557,8 @@ class OC {
 	 * register hooks for the cache
 	 */
 	public static function registerLogRotate() {
-		if (OC_Config::getValue('installed', false)) { //don't try to do this before we are properly setup
+		if (OC_Config::getValue('installed', false) && OC_Config::getValue('log_rotate_size', false)) {
+			//don't try to do this before we are properly setup
 			// register cache cleanup jobs
 			try { //if this is executed before the upgrade to the new backgroundjob system is completed it will throw an exception
 				\OCP\BackgroundJob::registerJob('OC\Log\Rotate', OC_Config::getValue("datadirectory", OC::$SERVERROOT.'/data').'/owncloud.log');
diff --git a/lib/log/rotate.php b/lib/log/rotate.php
index 41ef2ea299c..b620f0be15c 100644
--- a/lib/log/rotate.php
+++ b/lib/log/rotate.php
@@ -10,24 +10,26 @@ namespace OC\Log;
 
 /**
  * This rotates the current logfile to a new name, this way the total log usage
- * will stay limited and older entries are available for a while longer. The
- * total disk usage is twice LOG_SIZE_LIMIT.
+ * will stay limited and older entries are available for a while longer.
  * For more professional log management set the 'logfile' config to a different
  * location and manage that with your own tools.
  */
 class Rotate extends \OC\BackgroundJob\Job {
-	const LOG_SIZE_LIMIT = 104857600; // 100 MiB
+	private $max_log_size;
 	public function run($logFile) {
-		$filesize = @filesize($logFile);
-		if ($filesize >= self::LOG_SIZE_LIMIT) {
-			$this->rotate($logFile);
+		$this->max_log_size = OC_Config::getValue('log_rotate_size', false);
+		if ($this->max_log_size) {
+			$filesize = @filesize($logFile);
+			if ($filesize >= $this->max_log_size) {
+				$this->rotate($logFile);
+			}
 		}
 	}
 
 	protected function rotate($logfile) {
 		$rotatedLogfile = $logfile.'.1';
 		rename($logfile, $rotatedLogfile);
-		$msg = 'Log file "'.$logfile.'" was over 100MB, moved to "'.$rotatedLogfile.'"';
+		$msg = 'Log file "'.$logfile.'" was over '.$this->max_log_size.' bytes, moved to "'.$rotatedLogfile.'"';
 		\OC_Log::write('OC\Log\Rotate', $msg, \OC_Log::WARN);
 	}
 }
-- 
GitLab