diff --git a/core/lib/Thelia/Log/AbstractTlogDestination.php b/core/lib/Thelia/Log/AbstractTlogDestination.php index 0d3cde9e1..5dcb76f71 100755 --- a/core/lib/Thelia/Log/AbstractTlogDestination.php +++ b/core/lib/Thelia/Log/AbstractTlogDestination.php @@ -60,7 +60,7 @@ abstract class AbstractTlogDestination } //Récupère la valeur affectée à une configuration de la destination - public function getConfig($name) + public function getConfig($name, $default = false) { foreach ($this->_configs as $config) { if ($config->getName() == $name) { @@ -68,7 +68,7 @@ abstract class AbstractTlogDestination } } - return false; + return $default; } public function getConfigs() diff --git a/core/lib/Thelia/Log/Destination/TlogDestinationFile.php b/core/lib/Thelia/Log/Destination/TlogDestinationFile.php index a045196fe..5d9089ebe 100755 --- a/core/lib/Thelia/Log/Destination/TlogDestinationFile.php +++ b/core/lib/Thelia/Log/Destination/TlogDestinationFile.php @@ -37,33 +37,53 @@ class TlogDestinationFile extends AbstractTlogDestination const VAR_MODE = "tlog_destinationfile_mode"; const VALEUR_MODE_DEFAULT = "A"; + const VAR_MAX_FILE_SIZE_KB = "tlog_destinationfile_max_file_size"; + const MAX_FILE_SIZE_KB_DEFAULT = 1024; // 1 Mb + protected $path_defaut = false; protected $fh = false; public function __construct() { - $this->path_defaut = THELIA_ROOT . "log" . DS . self::TLOG_DEFAULT_NAME; - parent::__construct(); + $this->path_defaut = THELIA_ROOT . "log" . DS . self::TLOG_DEFAULT_NAME; + parent::__construct(); } public function configure() { $file_path = $this->getConfig(self::VAR_PATH_FILE); - $mode = strtolower($this->getConfig(self::VAR_MODE)) == 'a' ? 'a' : 'w'; + $mode = strtolower($this->getConfig(self::VAR_MODE, self::VALEUR_MODE_DEFAULT)) == 'a' ? 'a' : 'w'; if (! empty($file_path)) { if (! is_file($file_path)) { - $dir = dirname($file_path); - if (! is_dir($dir)) { - mkdir($dir, 0777, true); - } + $dir = dirname($file_path); + if (! is_dir($dir)) { + mkdir($dir, 0777, true); + } - touch($file_path); - chmod($file_path, 0777); + touch($file_path); + chmod($file_path, 0666); } if ($this->fh) @fclose($this->fh); + if (filesize($file_path) > 1024 * $this->getConfig(self::VAR_MAX_FILE_SIZE_KB, self::MAX_FILE_SIZE_KB_DEFAULT)) { + + $idx = 1; + + do { + $file_path_bk = "$file_path.$idx"; + + $idx++; + + } while (file_exists($file_path_bk)); + + rename($file_path, $file_path_bk); + + touch($file_path); + chmod($file_path, 0666); + } + $this->fh = fopen($file_path, $mode); } } @@ -94,6 +114,13 @@ class TlogDestinationFile extends AbstractTlogDestination 'Enter E to empty this file for each request, or A to always append logs. Consider resetting the file from time to time', self::VALEUR_MODE_DEFAULT, TlogDestinationConfig::TYPE_TEXTFIELD + ), + new TlogDestinationConfig( + self::VAR_MAX_FILE_SIZE_KB, + 'Maximum log file size, in Kb', + 'When this size if exeeded, a backup copy of the file is made, and a new log file is opened. As the file size check is performed only at the beginning of a request, the file size may be bigger thant this limit. Note: 1 Mb = 1024 Kb', + self::MAX_FILE_SIZE_KB_DEFAULT, + TlogDestinationConfig::TYPE_TEXTFIELD ) ); } @@ -111,4 +138,4 @@ class TlogDestinationFile extends AbstractTlogDestination $this->fh = false; } -} +} \ No newline at end of file