Если я верно понимаю, ее идея - аккумулировать лог и одновременно нести значение.
1. А что будет с этим логом, если таки неожиданное исключение где-то вывалится или ООМ? Лог ведь пропадет полностью?
2. в какой момент и как правильно это все отдать, например, llogback (или чем мы там логируем)
3. верно ли я понимаю, что в сценарии с микросервисами надо передавать этот все растущий лог по сети?
Writer как тип данных это просто пара значений, об одном из которых известно, что он моноид. На него действуют все те же ограничения, что и на обычные данные. Потеряете данные из-за эксепшна - потеряете и записаное. Однако если говорить о typeclass MonadWriter, вы вполне можете определить кастомную монаду, которая будет и MonadError, и MonadWriter и Async, которая будет сама отлавливать эксепшны и складывать их в ваш тип ошибки и не терять записанное. Но определять такой тип, равноценно все правила буферизации, отсылки и чего угодно придётся самому. Из коробки я таких типов данных не видел.
Обсуждают сегодня