Added size limitation to the Thelia log file

This commit is contained in:
Franck Allimant
2013-11-01 16:45:25 +01:00
parent 2aefb87db7
commit 069b047801
2 changed files with 39 additions and 12 deletions

View File

@@ -60,7 +60,7 @@ abstract class AbstractTlogDestination
} }
//Récupère la valeur affectée à une configuration de la destination //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) { foreach ($this->_configs as $config) {
if ($config->getName() == $name) { if ($config->getName() == $name) {
@@ -68,7 +68,7 @@ abstract class AbstractTlogDestination
} }
} }
return false; return $default;
} }
public function getConfigs() public function getConfigs()

View File

@@ -37,33 +37,53 @@ class TlogDestinationFile extends AbstractTlogDestination
const VAR_MODE = "tlog_destinationfile_mode"; const VAR_MODE = "tlog_destinationfile_mode";
const VALEUR_MODE_DEFAULT = "A"; 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 $path_defaut = false;
protected $fh = false; protected $fh = false;
public function __construct() public function __construct()
{ {
$this->path_defaut = THELIA_ROOT . "log" . DS . self::TLOG_DEFAULT_NAME; $this->path_defaut = THELIA_ROOT . "log" . DS . self::TLOG_DEFAULT_NAME;
parent::__construct(); parent::__construct();
} }
public function configure() public function configure()
{ {
$file_path = $this->getConfig(self::VAR_PATH_FILE); $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 (! empty($file_path)) {
if (! is_file($file_path)) { if (! is_file($file_path)) {
$dir = dirname($file_path); $dir = dirname($file_path);
if (! is_dir($dir)) { if (! is_dir($dir)) {
mkdir($dir, 0777, true); mkdir($dir, 0777, true);
} }
touch($file_path); touch($file_path);
chmod($file_path, 0777); chmod($file_path, 0666);
} }
if ($this->fh) @fclose($this->fh); 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); $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', '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, self::VALEUR_MODE_DEFAULT,
TlogDestinationConfig::TYPE_TEXTFIELD 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; $this->fh = false;
} }
} }