Skip to content
Extraits de code Groupes Projets
Bifurcation depuis spip / spip
8323 validations de retard le dépôt en amont.
  • cerdic's avatar
    0b8bb0f9
    la separation des logs prives/publics en deux fichiers s'avere peu pratique a... · 0b8bb0f9
    cerdic a rédigé
    la separation des logs prives/publics en deux fichiers s'avere peu pratique a l'usage. On revient a un fichier unique, en prefixant les log d'un :Pri: ou :Pub: pour indiquer si le log vient du prive ou du public, et permettre un filtre grep facile.
    
    La specification du niveau de log permet maintenant de declencher des logs verbeux uniquement dans le prive si besoin, ce qui évite le probleme du noyage des logs prives dans le flux de log public sur un serveur de production.
    0b8bb0f9
    Historique
    la separation des logs prives/publics en deux fichiers s'avere peu pratique a...
    cerdic a rédigé
    la separation des logs prives/publics en deux fichiers s'avere peu pratique a l'usage. On revient a un fichier unique, en prefixant les log d'un :Pri: ou :Pub: pour indiquer si le log vient du prive ou du public, et permettre un filtre grep facile.
    
    La specification du niveau de log permet maintenant de declencher des logs verbeux uniquement dans le prive si besoin, ce qui évite le probleme du noyage des logs prives dans le flux de log public sur un serveur de production.
log.php 2,45 Kio
<?php

/***************************************************************************\
 *  SPIP, Systeme de publication pour l'internet                           *
 *                                                                         *
 *  Copyright (c) 2001-2011                                                *
 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
 *                                                                         *
 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
\***************************************************************************/

if (!defined('_ECRIRE_INC_VERSION')) return;

function inc_log_dist($message, $logname=NULL, $logdir=NULL, $logsuf=NULL) {

	static $compteur = array();
	global $nombre_de_logs, $taille_des_logs;

	if (is_null($logname) OR !is_string($logname))
		$logname = defined('_FILE_LOG') ? _FILE_LOG : 'spip';
	if (!isset($compteur[$logname])) $compteur[$logname] = 0;
	if ($logname != 'maj'
	AND defined('_MAX_LOG')
	AND (
		$compteur[$logname]++ > _MAX_LOG
		OR !$nombre_de_logs
		OR !$taille_des_logs
	))
		return;

	$logfile = ($logdir===NULL ? _DIR_LOG : $logdir)
	  . ($logname)
	  . ($logsuf===NULL ? _FILE_LOG_SUFFIX : $logsuf);

	// si spip_log() dans mes_options, poser dans spip.log
	if (!defined('_DIR_LOG'))
		$logfile = _DIR_RACINE._NOM_TEMPORAIRES_INACCESSIBLES.$logname.'.log';

	$rotate = 0;
	$pid = '(pid '.@getmypid().')';

	// accepter spip_log( Array )
	if (!is_string($message)) $message = var_export($message, true);

	$m = date("M d H:i:s").' '.$GLOBALS['ip'].' '.$pid.' '
	  //distinguer les logs prives et publics dans les grep
		. (test_espace_prive()?':Pri:':':Pub:')
		.preg_replace("/\n*$/", "\n", $message);


	if (@is_readable($logfile)
	AND (!$s = @filesize($logfile) OR $s > $taille_des_logs * 1024)) {
		$rotate = $nombre_de_logs;
		$m .= "[-- rotate --]\n";
	}

	$f = @fopen($logfile, "ab");
	if ($f) {
		fputs($f, ($logname!==NULL) ? $m : str_replace('<','&lt;',$m));
		fclose($f);
	}

	if ($rotate-- > 0
	AND function_exists('spip_unlink')) {
		spip_unlink($logfile . '.' . $rotate);
		while ($rotate--) {
			@rename($logfile . ($rotate ? '.' . $rotate : ''), $logfile . '.' . ($rotate + 1));
		}
	}

	// Dupliquer les erreurs specifiques dans le log general
	if ($logname !== _FILE_LOG
	  AND defined('_FILE_LOG'))
		inc_log_dist($logname=='maj' ? 'cf maj.log' : $message);
}

?>