3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2012 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
13 if (!defined('_ECRIRE_INC_VERSION')) return;
15 function inc_log_dist($message, $logname=NULL, $logdir=NULL, $logsuf=NULL) {
16 static $test_repertoire = array();
17 static $compteur = array();
18 static $debugverb = ""; // pour ne pas le recalculer au reappel
19 global $nombre_de_logs, $taille_des_logs;
21 if (is_null($logname) OR !is_string($logname))
22 $logname = defined('_FILE_LOG') ? _FILE_LOG
: 'spip';
23 if (!isset($compteur[$logname])) $compteur[$logname] = 0;
25 AND defined('_MAX_LOG')
27 $compteur[$logname]++
> _MAX_LOG
33 $logfile = ($logdir===NULL ? _DIR_LOG
: $logdir)
35 . ($logsuf===NULL ? _FILE_LOG_SUFFIX
: $logsuf);
37 if (!isset($test_repertoire[$d = dirname($logfile)])) {
38 $test_repertoire[$d] = false; // eviter une recursivite en cas d'erreur de sous_repertoire
39 $test_repertoire[$d] = (@is_dir
($d)?
true:(function_exists('sous_repertoire')?
sous_repertoire($d, '', false, true):false));
42 // si spip_log() dans mes_options, ou repertoire log/ non present, poser dans tmp/
43 if (!defined('_DIR_LOG') OR !$test_repertoire[$d])
44 $logfile = _DIR_RACINE
._NOM_TEMPORAIRES_INACCESSIBLES
.$logname.'.log';
47 $pid = '(pid '.@getmypid
().')';
49 // accepter spip_log( Array )
50 if (!is_string($message)) $message = var_export($message, true);
52 if (!$debugverb AND defined('_LOG_FILELINE') AND _LOG_FILELINE
){
53 $debug = debug_backtrace();
54 $l = $debug[1]['line'];
55 $fi = $debug[1]['file'];
56 if (strncmp($fi,_ROOT_RACINE
,strlen(_ROOT_RACINE
))==0)
57 $fi = substr($fi,strlen(_ROOT_RACINE
));
58 $fu = $debug[2]['function'];
59 $debugverb = "$fi:L$l:$fu"."():";
62 $m = date("M d H:i:s").' '.$GLOBALS['ip'].' '.$pid.' '
63 //distinguer les logs prives et publics dans les grep
65 . (test_espace_prive()?
':Pri:':':Pub:')
66 .preg_replace("/\n*$/", "\n", $message);
69 if (@is_readable
($logfile)
70 AND (!$s = @filesize
($logfile) OR $s > $taille_des_logs * 1024)) {
71 $rotate = $nombre_de_logs;
72 $m .= "[-- rotate --]\n";
75 $f = @fopen
($logfile, "ab");
77 fputs($f, (defined('_LOG_BRUT') AND _LOG_BRUT
) ?
$m : str_replace('<','<',$m));
82 AND function_exists('spip_unlink')) {
83 spip_unlink($logfile . '.' . $rotate);
85 @rename
($logfile . ($rotate ?
'.' . $rotate : ''), $logfile . '.' . ($rotate +
1));
89 // Dupliquer les erreurs specifiques dans le log general
90 if ($logname !== _FILE_LOG
91 AND defined('_FILE_LOG'))
92 inc_log_dist($logname=='maj' ?
'cf maj.log' : $message);