Контест\Аппликешн синглтогм (а, соотвественно, и все зависящие от него сервисы) - это плохая практика. Там вроде в студии даже предупреждение об это выдается, мол, ведет к утечкам памяти.
Если убрать аппликейшн из синглтона - то получить аппликейшн в любом месте становиться отнюдь не тривиальной задачей - ибо он достпен только там где есть ссылка на активити.
Алексей: меня беспокоют не логи. Меня беспокоит что в час-пик кол-во запросов возрастает в сотню раз. И сторонее API начинает дико тупить, выдавая ответ не за 3 секунды, а за 2 минуты (это проблема на их стороне, а кешировать их ответ нельзя). И получается что пользователи в час пик не дожидаются ответа, делает повторный запрос, и еще один, и еще один... Ну и тогда уже мой сервер начинает виснуть. Проблему можно решить многими способами, но через прекращение выполнения скрипта самы простой.
Кирилл Ярошевич: Так вам это и не надо - это уж мой код по обработке и логгированию ошибок, вам он не обязателен - это я просто скопировал кусок кода из своего проекта.
Кирилл Ярошевич: ну path - это, да - ваш uri. А то что часть кода красным - это понятно, у вас же вряд ли подключен Sentry, нет метода toast у фрагмента, может даже нет R.string.close
Возможно не точно выразился: по требованию - не значит по месту использования, а значит по месту иньекции. Даггер генерирует метод inject. Никто не запрещает ему проверить в этом методе был ли уже создан внедряемый объект или нет (и если нет - создать его). Тут единственное ограничение - что эти метода проверки/создания длжны быть синхронизированные, но это имхо не проблема.
Что касается проблем - вопрос больше теоретический. Да, у меня есть одна зависимость которая долго иницализируется, но это не проблема ее переделать. Просто контейнер который юзается на бэкенде умеет это все из коробки, просто переключением парамтра в конфиге\ аннотацией. Странно что Dagger не умеет такого.
Проблема транзакций вот в чем: при каждом запросе вы пишете в файл. Писать нужно сразу же, ибо паралельно может выполняться несколько скриптов. В случае отката транзакции, вам нужно удалить из этого файла выполненные запросы транзакции. Как вы это будете делать - лично я представить не могу. Разве что писать не в файл, а в какой-нить Redis.
Олег Лысенко: Да, именно. В yii система логгировния работае так: есть главный компонент который так сказать принимат логи. Он уже респределяет логи по так называемым целям yii/log/Target. Вам нужно унаследоваться от этого класса, написать там свою обработку, и потом сконифгурировать в конфиге компонент логгирования чтоб он юзал этот класс. Все запросы к БД логгируются вот так : Yii::info($rawSql, 'yii\db\Command::query'); Соответсвенно, у вашей цели должна быть категория yii\db\Command::query.
Плюс не забудьте что цели сбрасывают лог в файл не сразу, а пачками, в целях производительности. Вам это нужно будет убрать, ибо у вас будет парралельная работа нескольких скриптов и порядок будет неверный.