我有一个运行3.0.2*的joomla站点,我注意到joomla捕获的异常没有记录在任何地方。我目前正在使用内置的数据库日志记录,由以下代码初始化,放在自定义插件的onAfterInitialize函数中。
// Initialize logging.
jimport('joomla.log.log');
$config = jFactory::getConfig();
JLog::addLogger(array(
'logger' => 'database',
'db_driver' => $config->get('dbtype'),
'db_host' => $config->get('host'),
'db_user' => $config->get('user'),
'db_pass' => $config->get('password'),
'db_prefix' => $config->get('dbprefix'),
'db_database' => ctaSettings::get('logging.db'),
JLog::ALL,
''
));
ctaSettings::get是一个类方法,用于检索用于日志记录的数据库的名称。我可以验证它是否正常工作,以及是否记录了以下命令:
JLog::add(__LINE__. " - ". __FILE__, JLog::INFO, 'cat');
但是,如果在组件中引发异常,则不会记录任何内容。Joomla应该记录被捕获的异常吗?有没有办法让Joomla内置的错误处理功能自动记录这些事情?我们有相当多的自定义代码,如果每个自定义组件、插件和模块都必须进行修改,以便在抛出错误时显式记录错误,这将是不方便的。
* We're working on upgrading, but cannot at the moment.
我使用了setErrorHandling方法来启用异常日志记录。它被否决了,但我的理解是,还没有引入任何替代方案。所以,我会保持开放,以防有人有更好的答案,但下面的代码行解决了我的问题。
JError::setErrorHandling(JLog::ALL & ~JLog::WARNING, 'log');
&JLog::WARNING是指定不记录"不推荐使用此类"错误。这并不理想,但似乎是唯一可行的答案。