Я добавил Monolog v.1.24.0 в свой проект.
Создать регистратор:
$logger = new Logger('db');
$logger->setTimezone(DateTime::getTimezone());
$logger->pushHandler(new StreamHandler(ROOT.'/log/db.log', Logger::DEBUG, 600));
Теперь в какой-то момент позже в коде я создаю сообщение и отправляю его в браузер:
// $result contains my array
$tmp = \json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRESERVE_ZERO_FRACTION | JSON_UNESCAPED_SLASHES);
echo $tmp;
$logger->notice($tmp);
Моя проблема в том, что я хочу извлечь информацию о времени, содержащуюся в журнале, хранящемся в db.log
и включить к тому, что повторяется пользователю.
Как это возможно?
PS: я могу сам построить время, но тогда лучше удалить весь проект Monolog и использовать свой собственный!
Вы пытаетесь использовать монолог и вообще регистратор PSR-3 для чего-то, что не предназначено для этого …
То, что происходит внутри монолога или, более конкретно, в этом случае с клиентом PSR-3, выходит за рамки того, чего вы пытаетесь достичь. Скорее всего, ваш бизнес-домен говорит, что вам нужно сохранить запись о действии, которое совершил пользователь. Затем сделайте это. Он не говорит о том, что вы хотите записать это, или если он говорит, что вам нужно записать это эти два не следует смешивать
Более того, вы не должны смешивать то, что монолог делает внутри, с тем, что вам нужно отобразить пользователю.
Таким образом, в итоге решение будет:
// $result contains my array
$tmp = \json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRESERVE_ZERO_FRACTION | JSON_UNESCAPED_SLASHES);
echo $tmp;
//
// write here custom code that saves my $msg where ever I need to and that it contains also the timestamp
//
// Then come here and log that my record is saved..
$logger->notice('Record is saved');
Вы должны понимать, что логгер является абстрактным слоем для LOGGING
.. Вы нарушаете принцип Лискова SOLID … Что произойдет, если в будущем вы удалите DB / Stream Handler из вашего монолога? И замените его чем-то другим, у которого нет метки времени.
Ваш код не удастся.
Других решений пока нет …