OwnCloud Fichier log

De EjnTricks

OwnCloud génère un fichier log tout au long de son utilisation. Cet article présente la configuration de ce fichier ainsi que son administration.


Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Etude

Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Configuration log

Le fichier de configuration config.php, emplacement /var/opt/owncloud/installed/config/config.php dans le cadre de cette installation, permet de configurer l'emplacement de la log. Par défaut ce fichier n'est complété qu'avec quelques éléments de configuration. Le fichier config.sample.php présente l'intégralité des éléments de configuration disponibles.

Trois paramètres sont particulièrement important.

  • log_type, permet de spécifier le mode de trace. Par défaut la valeur owncloud est activée, entraînant l'écriture d'un fichier;
/**
 * By default the ownCloud logs are sent to the ``owncloud.log`` file in the
 * default ownCloud data directory.
 * If syslogging is desired, set this parameter to ``syslog``.
 * Setting this parameter to ``errorlog`` will use the PHP error_log function
 * for logging.
 */
'log_type' => 'owncloud',
  • logfile, permet de spécifier le nom / emplacement du fichier de trace. Par défaut, la trace est créé dans le fichier owncloud.log dans le répertoire de données spécifié lors de la première utilisation;
/**
 * Change the ownCloud logfile name from ``owncloud.log`` to something else.
 */
'logfile' => 'owncloud.log',
  • loglevel, permet de spécifier le niveau de trace. Par défaut, les messages Warning et Error sont tracés.
/**
 * Loglevel to start logging at. Valid values are: 0 = Debug, 1 = Info, 2 =
 * Warning, 3 = Error. The default value is Warning.
 */
'loglevel' => 2,

D'autres paramètres sont disponibles mais beaucoup plus spécifiques.


Le commentaire pour le paramètre logfile n'est pas forcément très clair. On peut se demander si c'est le nom ou l'emplacement du fichier. L'étude du code source permet d'identifier le fichier lib/private/log/owncloug.php et de mieux comprendre.

	/**
	 * Init class data
	 */
	public static function init() {
		$defaultLogFile = OC_Config::getValue("datadirectory", OC::$SERVERROOT.'/data').'/owncloud.log';
		self::$logFile = OC_Config::getValue("logfile", $defaultLogFile);

		/*
		* Fall back to default log file if specified logfile does not exist
		* and can not be created. Error suppression is required in order to
		* not end up in the error handler which will try to log the error.
		* A better solution (compared to error suppression) would be checking
		* !is_writable(dirname(self::$logFile)) before touch(), but
		* is_writable() on directories used to be pretty unreliable on Windows
		* for at least some time.
		*/
		if (!file_exists(self::$logFile) && !@touch(self::$logFile)) {
			self::$logFile = $defaultLogFile;
		}
	}

Cet extrait de code montre une initialisation de l'emplacement avec owncloud.log comme nom de fichier, et la configuation datadirectory pour le répertoire de stockage. Puis la variable logFile est initialisée avec la valeur du paramètre logfile.

La conclusion est simple, la valeur de ce paramètre doit être l'emplacement du fichier.

Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Rotation

Par défaut, OwnCloud va écrire indéfiniment dans la trace. Ceci peut être problématique dans le cadre d'un serveur de production car le fichier peut prendre énormément de place. Le fichier de configuration config.php propose une option de rotation.

/**
 * Enables log rotation and limits the total size of logfiles. The default is 0,
 * or no rotation. Specify a size in bytes, for example 104857600 (100 megabytes
 * = 100 * 1024 * 1024 bytes). A new logfile is created with a new name when the
 * old logfile reaches your limit. The total size of all logfiles is double the
 * ``log_rotate_sizerotation`` value.
 */
'log_rotate_size' => false,

Encore une fois, le commentaire n'est pas très clair et le mode de fonctionnement pas très pratique. Il semblerait qu'il suffise de spécifier une taille maximale du fichier de log. L'analyse du code va permettre de mieux comprendre le fonctionnement. Il faut regarder le fichier lib/private/log/rotate.php.

class Rotate extends \OC\BackgroundJob\Job {
	private $max_log_size;
	public function run($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 '.$this->max_log_size.' bytes, moved to "'.$rotatedLogfile.'"';
		\OC_Log::write('OC\Log\Rotate', $msg, \OC_Log::WARN);
	}
}

Donc lorsque le fichier atteint la taille maximale, une rotation est effectuée. Cependant cela n'est réalisé qu'une seule fois. De plus, la rotation est réalisée depuis une tâche "cron", dont la configuration est spécifique à OwnCloud. Ceci est déclaré dans le fichier lib/base.php

	/**
	 * register hooks for the cache
	 */
	public static function registerLogRotate() {
		$systemConfig = \OC::$server->getSystemConfig();
		if ($systemConfig->getValue('installed', false) && $systemConfig->getValue('log_rotate_size', false) && !\OCP\Util::needUpgrade()) {
			//don't try to do this before we are properly setup
			//use custom logfile path if defined, otherwise use default of owncloud.log in data directory
			\OCP\BackgroundJob::registerJob('OC\Log\Rotate', $systemConfig->getValue('logfile', $systemConfig->getValue('datadirectory', OC::$SERVERROOT . '/data') . '/owncloud.log'));
		}
	}

Les tâches "cron" sont déclenchées par défaut lors de l'affichage des pages. Ceci n'est donc pas très pratique.


Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Configuration

Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Préparation environnement

L'installation étant réalisée sur une machine Ubuntu, la log va être placée au même emplacement que les autres traces. Un répertoire owncloud dans /var/log est créé.

# sudo mkdir -p /var/log/owncloud
# sudo chown www-data:adm /var/log/owncloud
# sudo chmod 750 /var/log/owncloud

Les permissions sont accordées au compte de démarrage du serveur Apache, soit www-data.

Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Emplacement

Le fichier config.php est modifié afin de spécifier l'emplacement de la log, soit /var/log/owncloud/owncloud.log

/**
 * Change the ownCloud logfile name from ``owncloud.log`` to something else.
 */
'logfile' => '/var/log/owncloud/owncloud.log',

Attention, le paramètre log_type n'est pas modifié car la valeur par défaut permet l'écriture dans le fichier.

Erreur lors de la création de la miniature : Impossible d'enregistrer la vignette sur la destination
Rotation

Malgré la mise à disposition de configuration pour la rotation, il est préférable d'utiliser l'outil Logrotate dans le cadre de cette installation sous Ubuntu. De plus, il existe déjà beaucoup de configuration sur lesquelles il est possible de s'inspirer. La configuration de Apache2 est pris pour exemple.

Un fichier owncloud est donc mis en place dans le répertoire /etc/logrotate.d.

#sudo cp -p /etc/logrotate.d/apache2 /etc/logrotate.d/owncloud

Il est ensuite modifié ainsi.

/var/log/owncloud/*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 640 www-data adm
}

A noter les droits mis sur le compte www-data car c'est ce compte qui exécute les écritures dans le fichier.

La configuration peut être validée avec logrotate et l'argument -d

#sudo logrotate -d /etc/logrotate.d/owncloud
reading config file /etc/logrotate.d/owncloud

Handling 1 logs

rotating pattern: /var/log/owncloud/*.log  after 1 days (14 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/owncloud/owncloud.log
  log does not need rotating