Я пишу собственный журнал парсера для CakePHP.CakePHP 3.x: журнал как сериализованный массив
Мне нужно только одно: это не сообщение «сообщение» журнала (как строка), а сериализованный массив с различными данными журнала (дата, тип, строка, трассировка стека и т. Д.).
Но я не понимаю, какой метод/класс я должен переписать, хотя я консультировался с API. Вы можете мне помочь?
EDIT:
На данный момент я делаю обратное: я читаю журналы (уже записаны) и преобразую их в массив с регулярным выражением.
Мой код:
$logs = array_map(function($log) {
preg_match('/^'.
'([\d\-]+\s[\d:]+)\s(Error: Fatal Error|Error|Notice: Notice|Warning: Warning)(\s\(\d+\))?:\s([^\n]+)\n'.
'(Exception Attributes:\s((.(?!Request|Referer|Stack|Trace))+)\n)?'.
'(Request URL:\s([^\n]+)\n)?'.
'(Referer URL:\s([^\n]+)\n)?'.
'(Stack Trace:\n(.+))?'.
'(Trace:\n(.+))?(.+)?'.
'/si', $log, $matches);
switch($matches[2]) {
case 'Error: Fatal Error':
$type = 'fatal';
break;
case 'Error':
$type = 'error';
break;
case 'Notice: Notice':
$type = 'notice';
break;
case 'Warning: Warning':
$type = 'warning';
break;
default:
$type = 'unknown';
break;
}
return (object) af([
'datetime' => \Cake\I18n\FrozenTime::parse($matches[1]),
'type' => $type,
'error' => $matches[4],
'attributes' => empty($matches[6]) ? NULL : $matches[6],
'url' => empty($matches[9]) ? NULL : $matches[9],
'referer' => empty($matches[11]) ? NULL : $matches[11],
'stack_trace' => empty($matches[13]) ? (empty($matches[16]) ? NULL : $matches[16]) : $matches[13],
'trace' => empty($matches[15]) ? NULL : $matches[15]
]);
}, af(preg_split('/[\r\n]{2,}/', $logs)));
Сейчас я делаю наоборот: я читаю журналы (уже написано) и с регулярным выражением я превратить их в массив.
Проблема в том, что это ужасно дорого. и что было бы лучше сделать обратное: писать непосредственно в журналы как сериализованный массив.
Что такое «_parser log_»? И каков контекст здесь, где именно точно записывается то, что вы хотите иметь в определенном формате? – ndm
@ndm, см. Мое редактирование. Это просто: журналы записываются как строка, которая содержит в себе разнообразную информацию (какой тип ошибки, дата и время, референт и URL запроса, сообщение и т. Д.). Но я хочу быть сериализованным массивом с этой информацией –
Я уже получил это, но где именно это данные? Вы говорите о журналах отладки/ошибок по умолчанию? т. е. должен ли каждый журнал быть сериализован? Или, может быть, просто ошибки? Возможно, вы используете собственный журнал, который должен быть затронут только один? Вам действительно нужно быть более конкретным. – ndm