Ошибка записи события возникает, когда в поле названия источника события система пытается записать большой текст. В поле источника (source) следует записывать имя части MODx, сниппета, модуля или плагина, отправившего сообщение, но при проверке конфигурации вместо этого в поле пишется достаточно длинная фраза о возникшей проблеме. Ошибка проявляется не у всех, так как если замечаний при проверке конфигурации нет, сообщения не генерируются.
Решение проблемы:
В папке manager/includes найти файл config_check.inc.php
Найти в нем четыре вызова функции logEvent:
Code:
$modx->logEvent(0,2,$warnings[$i][1],$_lang[’configcheck_configinc’]);
$modx->logEvent(0,2,$warnings[$i][1],$_lang[’configcheck_installer’]);
$modx->logEvent(0,2,$warnings[$i][1],$_lang[’configcheck_cache’]);
$modx->logEvent(0,2,$warnings[$i][1],$_lang[’configcheck_images’]);
КАЖДЫЙ вызов заменить на
Code:
$modx->logEvent(0,2,$warnings[$i][1],’Config Check’);
То есть сделать все вызовы одинаковыми. Если есть желание, можно сделать их разными, например ’Config Check inclide’ и ’Config Check installer’.
Теперь все должно работать. Если опять появятся сообщения об ошибке записи события, следует искать, какой сниппет, плагин или модуль неверно обращается к функции logEvent
$modx->logEvent(0,2,$warnings[$i][1],$_lang['configcheck_configinc']);
$modx->logEvent(0,2,$warnings[$i][1],'Config Check');

Файл конфигурации все еще доступен для записи, установите атрибут "Только для чтения".В функцию, которая записывает сообщение об ошибке в базу, передается короткая:
Config CheckИ это правильно, так как четвертый параметр функции logEvent предполагает название фрагмента, вызвавшего проблему, а описание этой проблемы помещается в третий параметр. Ошибка возникала как раз из-за того, что описание помещалось в поле, слишком короткое для него.
Значит на той машине нет такой проблемы с конфигурацией (файл доступен для записи), следовательно не требуется записывать сообщение в журнал.
Я ставил MODx на др. машину и там этого момента нет. архив тот же самый.
$source= mysql_escape_string($source);
$source = mb_substr($source, 0, 50 , "UTF-8");
$source = substr($source, 0, 50);
echo "Error while inserting event log into database.";
echo "Error while inserting event log into database: ". mysql_error();
$evtid= intval($evtid);
$LoginUserID=$this->getLoginUserID(); if ($LoginUserID=='') $LoginUserID=0;
"VALUES($evtid,$type," . time() . ",'$source','$msg','" . $this->getLoginUserID() . "')";
"VALUES($evtid,$type," . time() . ",'$source','$msg','" . $LoginUserID . "')";