diff --git a/.gitattributes b/.gitattributes
index 7fcfc90e4ec568302f560ddbe76e3e336bbd05f3..c303d268fb188f22d65acecc173bef5b030d032c 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -248,6 +248,7 @@ ecrire/inc/json.php -text
 ecrire/inc/lang_liste.php -text
 ecrire/inc/legender.php -text
 ecrire/inc/lien.php -text
+ecrire/inc/log.php -text
 ecrire/inc/mail.php -text
 ecrire/inc/meme_rubrique.php -text
 ecrire/inc/message_select.php -text
diff --git a/ecrire/inc/log.php b/ecrire/inc/log.php
new file mode 100644
index 0000000000000000000000000000000000000000..5fd42b8ec24a3d3d88ec080208aa6235b09b2245
--- /dev/null
+++ b/ecrire/inc/log.php
@@ -0,0 +1,77 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2009                                                *
+ *  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))
+		$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, ($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'))
+		spip_log($logname=='maj' ? 'cf maj.log' : $message);
+}
+
+?>
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 808405e65e9e77a805834a77c04b230005c74616..5aee8eb3b85e2a32528a871c67146f20d1c7d522 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -149,64 +149,8 @@ function pipeline($action, $val=null) {
 //
 // http://doc.spip.org/@spip_log
 function spip_log($message, $logname=NULL, $logdir=NULL, $logsuf=NULL) {
-	static $compteur = array();
-	global $nombre_de_logs, $taille_des_logs;
-
-	if (is_null($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, ($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'))
-		spip_log($logname=='maj' ? 'cf maj.log' : $message);
+	$log = charger_fonction('log', 'inc');
+	$log( $message, $logname, $logdir, $logsuf);
 }
 
 // Renvoie le _GET ou le _POST emis par l'utilisateur