forked from Wavyzz/dolibarr
I've split all log handlers into classes so that people can make new log handler systems without making changes to the core. Also, now every log handler can handle how and what will be logged.
316 lines
10 KiB
PHP
316 lines
10 KiB
PHP
<?php
|
|
/* Copyright (C) 2005-2012 Laurent Destailleur <eldy@users.sourceforge.net>
|
|
* Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
|
|
* Copyright (C) 2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/**
|
|
* \file htdocs/admin/syslog.php
|
|
* \ingroup syslog
|
|
* \brief Setup page for logs module
|
|
*/
|
|
|
|
require '../main.inc.php';
|
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
|
|
|
if (!$user->admin) accessforbidden();
|
|
|
|
$langs->load("admin");
|
|
$langs->load("other");
|
|
|
|
$error=0; $mesg='';
|
|
$action = GETPOST("action");
|
|
|
|
$syslogModules = array();
|
|
$activeModules = array();
|
|
|
|
if (defined('SYSLOG_HANDLERS')) $activeModules = unserialize(SYSLOG_HANDLERS);
|
|
|
|
$dir = dol_buildpath('/core/modules/syslog/');
|
|
|
|
if (is_dir($dir))
|
|
{
|
|
$handle = opendir($dir);
|
|
|
|
if (is_resource($handle))
|
|
{
|
|
$var=true;
|
|
|
|
while (($file = readdir($handle))!==false)
|
|
{
|
|
if (substr($file, 0, 11) == 'mod_syslog_' && substr($file, dol_strlen($file)-3, 3) == 'php')
|
|
{
|
|
$file = substr($file, 0, dol_strlen($file)-4);
|
|
|
|
require_once $dir.$file.'.php';
|
|
|
|
$module = new $file;
|
|
|
|
// Show modules according to features level
|
|
if ($module->getVersion() == $module::DEVELOPMENT && $conf->global->MAIN_FEATURES_LEVEL < 2) continue;
|
|
if ($module->getVersion() == $module::EXPERIMENTAL && $conf->global->MAIN_FEATURES_LEVEL < 1) continue;
|
|
|
|
$syslogModules[] = $file;
|
|
}
|
|
}
|
|
closedir($handle);
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
* Actions
|
|
*/
|
|
|
|
// Set modes
|
|
if ($action == 'set')
|
|
{
|
|
$db->begin();
|
|
|
|
$activeModules = array();
|
|
$selectedModules = (isset($_POST['SYSLOG_HANDLERS']) ? $_POST['SYSLOG_HANDLERS'] : array());
|
|
|
|
foreach ($selectedModules as $syslogHandler)
|
|
{
|
|
if (in_array($syslogHandler, $syslogModules))
|
|
{
|
|
$module = new $syslogHandler;
|
|
|
|
if ($module->isActive())
|
|
{
|
|
$activeModules[] = $syslogHandler;
|
|
|
|
foreach ($module->configure() as $option)
|
|
{
|
|
if ($_POST[$option['constant']])
|
|
{
|
|
dolibarr_del_const($db, $option['constant'], 0);
|
|
dolibarr_set_const($db, $option['constant'], $_POST[$option['constant']], 'chaine');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
dolibarr_set_const($db, 'SYSLOG_HANDLERS', serialize($activeModules), 'chaine');
|
|
|
|
if (! $error)
|
|
{
|
|
$db->commit();
|
|
$mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>";
|
|
}
|
|
else
|
|
{
|
|
$db->rollback();
|
|
if (empty($mesg)) $mesg = "<font class=\"error\">".$langs->trans("Error")."</font>";
|
|
}
|
|
|
|
}
|
|
|
|
// Set level
|
|
if ($action == 'setlevel')
|
|
{
|
|
$level = GETPOST("level");
|
|
$res = dolibarr_set_const($db,"SYSLOG_LEVEL",$level,'chaine',0,'',0);
|
|
dol_syslog("admin/syslog: level ".$level);
|
|
|
|
if (! $res > 0) $error++;
|
|
if (! $error)
|
|
{
|
|
$mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>";
|
|
}
|
|
else
|
|
{
|
|
$mesg = "<font class=\"error\">".$langs->trans("Error")."</font>";
|
|
}
|
|
}
|
|
|
|
/*
|
|
* View
|
|
*/
|
|
|
|
llxHeader();
|
|
|
|
$form=new Form($db);
|
|
|
|
$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
|
|
print_fiche_titre($langs->trans("SyslogSetup"),$linkback,'setup');
|
|
print '<br>';
|
|
|
|
$def = array();
|
|
|
|
$syslogfacility=$defaultsyslogfacility=dolibarr_get_const($db,"SYSLOG_FACILITY",0);
|
|
$syslogfile=$defaultsyslogfile=dolibarr_get_const($db,"SYSLOG_FILE",0);
|
|
|
|
if (! $defaultsyslogfacility) $defaultsyslogfacility='LOG_USER';
|
|
if (! $defaultsyslogfile) $defaultsyslogfile='dolibarr.log';
|
|
|
|
if ($conf->global->MAIN_MODULE_MULTICOMPANY && $user->entity)
|
|
{
|
|
print '<div class="error">'.$langs->trans("ContactSuperAdminForChange").'</div>';
|
|
$option = 'disabled="disabled"';
|
|
}
|
|
|
|
// Output mode
|
|
print_titre($langs->trans("SyslogOutput"));
|
|
|
|
// Mode
|
|
print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
|
|
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
|
print '<input type="hidden" name="action" value="set">';
|
|
print '<table class="noborder" width="100%">';
|
|
print '<tr class="liste_titre">';
|
|
print '<td>'.$langs->trans("Type").'</td><td>'.$langs->trans("Value").'</td>';
|
|
print '<td align="right" colspan="2"><input type="submit" class="button" '.$option.' value="'.$langs->trans("Modify").'"></td>';
|
|
print "</tr>\n";
|
|
$var=true;
|
|
|
|
foreach ($syslogModules as $moduleName)
|
|
{
|
|
$module = new $moduleName;
|
|
|
|
$var=!$var;
|
|
print '<tr '.$bc[$var].'>';
|
|
print '<td width="140"><input '.$bc[$var].' type="checkbox" name="SYSLOG_HANDLERS[]" value="'.$moduleName.'" '.(in_array($moduleName, $activeModules) ? 'checked="checked"' : '').(!$module->isActive() ? 'disabled="disabled"' : '').'> ';
|
|
print $module->getName().'</td>';
|
|
|
|
print '<td nowrap="nowrap">';
|
|
if ($module->configure())
|
|
{
|
|
foreach ($module->configure() as $option)
|
|
{
|
|
if (defined($option['constant'])) $value = constant($option['constant']);
|
|
else $value = (isset($option['default']) ? $option['default'] : '');
|
|
|
|
print $option['name'].': <input type="text" class="flat" name="'.$option['constant'].'" value="'.$value.'"'.(isset($option['attr']) ? ' '.$option['attr'] : '').'>';
|
|
}
|
|
}
|
|
print '</td>';
|
|
|
|
print '<td align="left">';
|
|
if ($module->getInfo())
|
|
{
|
|
print $form->textwithpicto('', $module->getInfo());
|
|
}
|
|
print '</td>';
|
|
print "</tr>\n";
|
|
}
|
|
|
|
// // Output to file
|
|
// $var=!$var;
|
|
// print '<tr '.$bc[$var].'><td width="140"><input '.$bc[$var].' type="checkbox" name="SYSLOG_FILE_ON" '.$option.' value="1" '.($syslog_file_on?' checked="checked"':'').'> '.$langs->trans("SyslogSimpleFile").'</td>';
|
|
// print '<td nowrap="nowrap">'.$langs->trans("SyslogFilename").': <input type="text" class="flat" name="filename" '.$option.' size="60" value="'.$defaultsyslogfile.'">';
|
|
// print '</td>';
|
|
// print "<td align=\"left\">".$form->textwithpicto('',$langs->trans("YouCanUseDOL_DATA_ROOT"));
|
|
// print '</td></tr>';
|
|
|
|
// // Output to syslog
|
|
// $var=!$var;
|
|
// print '<tr '.$bc[$var].'><td width="140"><input '.$bc[$var].' type="checkbox" name="SYSLOG_SYSLOG_ON" '.$option.' value="1" '.($syslog_syslog_on?' checked="checked"':'').'> '.$langs->trans("SyslogSyslog").'</td>';
|
|
// print '<td nowrap="nowrap">'.$langs->trans("SyslogFacility").': <input type="text" class="flat" name="facility" '.$option.' value="'.$defaultsyslogfacility.'">';
|
|
// print '</td>';
|
|
// print "<td align=\"left\">".$form->textwithpicto('', $langs->trans('OnlyWindowsLOG_USER'));
|
|
// print '</td></tr>';
|
|
|
|
// // Output to Firebug
|
|
// try
|
|
// {
|
|
// set_include_path('/usr/share/php/');
|
|
// $res=@include_once 'FirePHPCore/FirePHP.class.php';
|
|
// restore_include_path();
|
|
// if ($res)
|
|
// {
|
|
// $var=!$var;
|
|
// print '<tr '.$bc[$var].'><td width="140"><input '.$bc[$var].' type="checkbox" name="SYSLOG_FIREPHP_ON" '.$option.' value="1" ';
|
|
// if (! class_exists('FirePHP')) print ' disabled="disabled"';
|
|
// else print ($syslog_firephp_on?' checked="checked"':"");
|
|
// print '> '.$langs->trans("FirePHP").'</td>';
|
|
// print '<td nowrap="nowrap">';
|
|
// print '</td>';
|
|
// print "<td align=\"left\">".$form->textwithpicto('','FirePHP must be installed onto PHP and FirePHP plugin for Firefox must also be installed');
|
|
// print '</td></tr>';
|
|
// }
|
|
// }
|
|
// catch(Exception $e)
|
|
// {
|
|
// // Do nothing
|
|
// print '<!-- FirePHP no available into PHP -->'."\n";
|
|
// }
|
|
|
|
// // Output to Chrome
|
|
// try
|
|
// {
|
|
// set_include_path('/usr/share/php/');
|
|
// $res=@include_once 'ChromePhp.php';
|
|
// restore_include_path();
|
|
// if ($res)
|
|
// {
|
|
// $var=!$var;
|
|
// print '<tr '.$bc[$var].'><td width="140"><input '.$bc[$var].' type="checkbox" name="SYSLOG_CHROMEPHP_ON" '.$option.' value="1" ';
|
|
// if (! class_exists('ChromePHP')) print ' disabled="disabled"';
|
|
// else print ($syslog_chromephp_on?' checked="checked"':"");
|
|
// print '> '.$langs->trans("ChromePHP").'</td>';
|
|
// print '<td nowrap="nowrap">';
|
|
// print '</td>';
|
|
// print "<td align=\"left\">".$form->textwithpicto('','ChromePHP must be installed onto PHP path and ChromePHP plugin for Chrome must also be installed');
|
|
// print '</td></tr>';
|
|
// }
|
|
// }
|
|
// catch(Exception $e)
|
|
// {
|
|
// // Do nothing
|
|
// print '<!-- ChromePHP no available into PHP -->'."\n";
|
|
// }
|
|
|
|
print "</table>\n";
|
|
print "</form>\n";
|
|
|
|
print '<br>';
|
|
|
|
print_titre($langs->trans("SyslogLevel"));
|
|
|
|
// Level
|
|
print '<form action="syslog.php" method="post">';
|
|
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
|
print '<input type="hidden" name="action" value="setlevel">';
|
|
print '<table class="noborder" width="100%">';
|
|
print '<tr class="liste_titre">';
|
|
print '<td>'.$langs->trans("Parameter").'</td><td>'.$langs->trans("Value").'</td>';
|
|
print '<td align="right"><input type="submit" class="button" '.$option.' value="'.$langs->trans("Modify").'"></td>';
|
|
print "</tr>\n";
|
|
$var=true;
|
|
$var=!$var;
|
|
print '<tr '.$bc[$var].'><td width="140">'.$langs->trans("SyslogLevel").'</td>';
|
|
print '<td colspan="2"><select class="flat" name="level" '.$option.'>';
|
|
print '<option value="'.LOG_EMERG.'" '.($conf->global->SYSLOG_LEVEL==LOG_EMERG?'SELECTED':'').'>LOG_EMERG ('.LOG_EMERG.')</option>';
|
|
print '<option value="'.LOG_ALERT.'" '.($conf->global->SYSLOG_LEVEL==LOG_ALERT?'SELECTED':'').'>LOG_ALERT ('.LOG_ALERT.')</option>';
|
|
print '<option value="'.LOG_CRIT.'" '.($conf->global->SYSLOG_LEVEL==LOG_CRIT?'SELECTED':'').'>LOG_CRIT ('.LOG_CRIT.')</option>';
|
|
print '<option value="'.LOG_ERR.'" '.($conf->global->SYSLOG_LEVEL==LOG_ERR?'SELECTED':'').'>LOG_ERR ('.LOG_ERR.')</option>';
|
|
print '<option value="'.LOG_WARNING.'" '.($conf->global->SYSLOG_LEVEL==LOG_WARNING?'SELECTED':'').'>LOG_WARNING ('.LOG_WARNING.')</option>';
|
|
print '<option value="'.LOG_NOTICE.'" '.($conf->global->SYSLOG_LEVEL==LOG_NOTICE?'SELECTED':'').'>LOG_NOTICE ('.LOG_NOTICE.')</option>';
|
|
print '<option value="'.LOG_INFO.'" '.($conf->global->SYSLOG_LEVEL==LOG_INFO?'SELECTED':'').'>LOG_INFO ('.LOG_INFO.')</option>';
|
|
print '<option value="'.LOG_DEBUG.'" '.($conf->global->SYSLOG_LEVEL>=LOG_DEBUG?'SELECTED':'').'>LOG_DEBUG ('.LOG_DEBUG.')</option>';
|
|
print '</select>';
|
|
print '</td></tr>';
|
|
print '</table>';
|
|
print "</form>\n";
|
|
|
|
dol_htmloutput_mesg($mesg);
|
|
|
|
llxFooter();
|
|
|
|
$db->close();
|
|
?>
|