Adjust logging configuration to suit the new logger implementation

refs #6038
This commit is contained in:
Johannes Meyer 2014-04-30 11:33:36 +02:00
parent a5faa8bf25
commit 0b3d3e9bb2
1 changed files with 98 additions and 133 deletions

View File

@ -31,12 +31,9 @@
namespace Icinga\Form\Config;
use Zend_Config;
use Zend_Form_Element_Text;
use Icinga\Application\Config;
use Icinga\Application\Icinga;
use Icinga\Web\Form;
use Icinga\Application\Icinga;
use Icinga\Web\Form\Validator\WritablePathValidator;
use Icinga\Web\Form\Decorator\ConditionalHidden;
/**
* Form class for setting the application wide logging configuration
@ -44,58 +41,13 @@ use Icinga\Web\Form\Decorator\ConditionalHidden;
class LoggingForm extends Form
{
/**
* Base directory to use instead of the one provided by Icinga::app (used for testing)
* Return the default logging directory for type "stream"
*
* @var null
* @return string
*/
private $baseDir = null;
/**
* Set a different base directory to use for default paths instead of the one provided by Icinga::app()
*
* @param string $dir The new directory to use
*/
public function setBaseDir($dir)
protected function getDefaultLogDir()
{
$this->baseDir = $dir;
}
/**
* Return the applications base directory or the value from a previous setBaseDir call
*
* This is used to determine the default logging paths in a manner that allows to set a different path
* during testing
*
* @return string
*/
public function getBaseDir()
{
if ($this->baseDir) {
return $this->baseDir;
}
return realpath(Icinga::app()->getApplicationDir() . '/../');
}
/**
* Return true if the debug log path textfield should be displayed
*
* This is the case if the "logging_use_debug" field is autosubmitted
* and true or if it is not submitted, but the configuration for debug
* logging is set to true
*
* @param Zend_Config $config The debug section of the config.ini
*
* @return bool Whether to display the debug path field or not
*/
private function shouldDisplayDebugLog(Zend_Config $config)
{
$debugParam = $this->getRequest()->getParam('logging_debug_enable', null);
if ($debugParam !== null) {
return intval($debugParam) === 1;
} else {
return intval($config->get('enable', 0)) === 1;
}
return realpath(Icinga::app()->getApplicationDir() . '/../var/log/icingaweb.log');
}
/**
@ -108,108 +60,121 @@ class LoggingForm extends Form
$this->setName('form_config_logging');
$config = $this->getConfiguration();
$logging = $config->logging;
if ($logging === null) {
$logging = new Zend_Config(array());
}
$debug = $logging->debug;
if ($debug === null) {
$debug = new Zend_Config(array());
if (($loggingConfig = $config->logging) === null) {
$loggingConfig = new Zend_Config(array());
}
$txtLogPath = new Zend_Form_Element_Text(
$this->addElement(
'checkbox',
'logging_enable',
array(
'required' => true,
'label' => t('Logging Enabled'),
'helptext' => t('Check this to enable logging.'),
'value' => $loggingConfig->enable ? 1 : 0
)
);
$this->addElement(
'select',
'logging_level',
array(
'name' => 'logging_app_target',
'label' => 'Application Log Path',
'helptext' => 'The logfile to write the icingaweb debug logs to.'
. 'The webserver must be able to write at this location',
'required' => true,
'value' => $logging->get('target', $this->getBaseDir() . '/var/log/icingaweb.log')
'label' => t('Logging Level'),
'helptext' => t('The maximum loglevel to emit.'),
'value' => intval($loggingConfig->get('level', 0)),
'multiOptions' => array(
0 => t('Error'),
1 => t('Warning'),
2 => t('Information'),
3 => t('Debug')
)
)
);
$txtLogPath->addValidator(new WritablePathValidator());
$this->addElement($txtLogPath);
$this->addElement(
'checkbox',
'logging_app_verbose',
'select',
'logging_type',
array(
'label' => 'Verbose Logging',
'required' => true,
'helptext' => 'Check to write more verbose output to the icinga log file',
'value' => intval($logging->get('verbose', 0)) === 1
'required' => true,
'label' => t('Logging Type'),
'helptext' => t('The type of logging to utilize.'),
'value' => $loggingConfig->get('type', 'stream'),
'multiOptions' => array(
'stream' => t('File'),
'syslog' => 'Syslog'
)
)
);
$this->enableAutoSubmit(array('logging_type'));
$this->addElement(
'checkbox',
'logging_debug_enable',
array(
'label' => 'Use Debug Log',
'required' => true,
'helptext' => 'Check to write a seperate debug log (Warning: This file can grow very big)',
'value' => $this->shouldDisplayDebugLog($debug)
)
);
switch ($this->getRequest()->getParam('logging_type', $loggingConfig->get('type', 'stream')))
{
case 'stream':
$this->addElement(
'text',
'logging_target',
array(
'required' => true,
'label' => t('Filepath'),
'helptext' => t('The logfile to write messages to.'),
'value' => $loggingConfig->target ? $loggingConfig->target : $this->getDefaultLogDir(),
'validators' => array(new WritablePathValidator())
)
);
break;
case 'syslog':
$this->addElement(
'text',
'logging_application',
array(
'required' => true,
'label' => t('Application Prefix'),
'helptext' => t('The name of the application by which to prefix syslog messages.'),
'value' => $loggingConfig->get('application', 'icingaweb')
)
);
$this->addElement(
'select',
'logging_facility',
array(
'required' => true,
'label' => t('Facility'),
'helptext' => t('The Syslog facility to utilize.'),
'value' => $loggingConfig->get('facility', 'LOG_USER'),
'multiOptions' => array(
'LOG_USER'
)
)
);
break;
}
$textLoggingDebugPath = new Zend_Form_Element_Text(
array(
'name' => 'logging_debug_target',
'label' => 'Debug Log Path',
'required' => $this->shouldDisplayDebugLog($debug),
'condition' => $this->shouldDisplayDebugLog($debug),
'value' => $debug->get('target', $this->getBaseDir() . '/var/log/icingaweb2.debug.log'),
'helptext' => 'Set the path to the debug log'
)
);
$textLoggingDebugPath->addValidator(new WritablePathValidator());
$decorator = new ConditionalHidden();
$this->addElement($textLoggingDebugPath);
$textLoggingDebugPath->addDecorator($decorator);
$this->enableAutoSubmit(array('logging_debug_enable'));
$this->addElement(
'button',
'btn_submit',
array(
'type' => 'submit',
'escape' => false,
'value' => '1',
'class' => 'btn btn-cta btn-common',
'label' => '<i class="icinga-icon-save"></i> Save Changes'
)
);
$this->setSubmitLabel('{{SAVE_ICON}} Save Changes');
}
/**
* Return a Zend_Config object containing the state defined in this form
* Return a Zend_Config object containing the state defined in this form
*
* @return Zend_Config The config defined in this form
* @return Zend_Config The config defined in this form
*/
public function getConfig()
{
$config = $this->getConfiguration();
if ($config->logging === null) {
$config->logging = new Zend_Config(array(), true);
}
if ($config->logging->debug === null) {
$config->logging->debug = new Zend_Config(array(), true);
}
$values = $this->getValues();
$cfg = $config->toArray();
$cfg = $this->getConfiguration()->toArray();
$cfg['logging']['enable'] = 1;
$cfg['logging']['type'] = 'stream';
$cfg['logging']['verbose'] = $values['logging_app_verbose'];
$cfg['logging']['target'] = $values['logging_app_target'];
$cfg['logging']['enable'] = $values['logging_enable'] == 1;
$cfg['logging']['level'] = $values['logging_level'];
switch ($values['logging_type'])
{
case 'stream':
$cfg['logging']['target'] = $values['logging_target'];
break;
case 'syslog':
$cfg['logging']['application'] = $values['logging_application'];
$cfg['logging']['facility'] = $values['logging_facility'];
break;
}
$cfg['logging']['debug']['enable'] = intval($values['logging_debug_enable']);
$cfg['logging']['debug']['type'] = 'stream';
$cfg['logging']['debug']['target'] = $values['logging_debug_target'];
return new Zend_Config($cfg);
}
}