Exemplo n.º 1
0
Arquivo: log.php Projeto: rhertzog/lcs
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)
	  . (test_espace_prive()?'prive_':'') //distinguer les logs prives et publics
	  . ($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.' '
		.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, (defined('_LOG_BRUT') AND _LOG_BRUT) ? $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);
}
Exemplo n.º 2
0
function inc_log_dist($message, $logname = null, $logdir = null, $logsuf = null)
{
    static $test_repertoire = array();
    static $compteur = array();
    static $debugverb = "";
    // pour ne pas le recalculer au reappel
    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 !$GLOBALS['nombre_de_logs'] or !$GLOBALS['taille_des_logs'])) {
        return;
    }
    $logfile = ($logdir === null ? _DIR_LOG : $logdir) . $logname . ($logsuf === null ? _FILE_LOG_SUFFIX : $logsuf);
    if (!isset($test_repertoire[$d = dirname($logfile)])) {
        $test_repertoire[$d] = false;
        // eviter une recursivite en cas d'erreur de sous_repertoire
        $test_repertoire[$d] = @is_dir($d) ? true : (function_exists('sous_repertoire') ? sous_repertoire($d, '', false, true) : false);
    }
    // si spip_log() dans mes_options, ou repertoire log/ non present, poser dans tmp/
    if (!defined('_DIR_LOG') or !$test_repertoire[$d]) {
        $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);
    }
    if (!$debugverb and defined('_LOG_FILELINE') and _LOG_FILELINE) {
        $debug = debug_backtrace();
        $l = $debug[1]['line'];
        $fi = $debug[1]['file'];
        if (strncmp($fi, _ROOT_RACINE, strlen(_ROOT_RACINE)) == 0) {
            $fi = substr($fi, strlen(_ROOT_RACINE));
        }
        $fu = isset($debug[2]['function']) ? $debug[2]['function'] : '';
        $debugverb = "{$fi}:L{$l}:{$fu}" . "():";
    }
    $m = date("Y-m-d H:i:s") . ' ' . (isset($GLOBALS['ip']) ? $GLOBALS['ip'] : '') . ' ' . $pid . ' ' . $debugverb . (test_espace_prive() ? ':Pri:' : ':Pub:') . preg_replace("/\n*\$/", "\n", $message);
    if (@is_readable($logfile) and (!($s = @filesize($logfile)) or $s > $GLOBALS['taille_des_logs'] * 1024)) {
        $rotate = $GLOBALS['nombre_de_logs'];
        $m .= "[-- rotate --]\n";
    }
    $f = @fopen($logfile, "ab");
    if ($f) {
        fputs($f, (defined('_LOG_BRUT') and _LOG_BRUT) ? $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);
    }
    $debugverb = "";
}