Алексей: меня беспокоют не логи. Меня беспокоит что в час-пик кол-во запросов возрастает в сотню раз. И сторонее 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.
Плюс не забудьте что цели сбрасывают лог в файл не сразу, а пачками, в целях производительности. Вам это нужно будет убрать, ибо у вас будет парралельная работа нескольких скриптов и порядок будет неверный.
Александр: еще вариант - мож у вас префиксы настроенны для таблиц? тогда нужно в tableName писать {{products_to_categories}} - или как-то так - не помню уже. Возможно нужно убрать префикс, если он задан.
MakarkinPRO: По хорошему вы не должны сохранять пароль\логин: вы должны провести аутентификацию на своем бекенде, который должен вернуть ключ по которому потом и проверяется аутентификация.
В любом случае (храните ли вы ключ или пароль\логин) их нужно защищать. В первых, можете хранить их в SharedPreferences c MODE_PRIVATE - это ограничит доступ к ним извне вашего приложения. Другое дело что это не поможет если устройство рутованное. Поэтом стоит их еще и зашифровать, сохраняя ключ в KeyStore (android 4.3+). Тогда будет куда сложнее взломать, но тоже реально.
Лично я в приложении запрещаю сохранять кртичные важные, если устройство рутованное. Если нет - шифрую их на сессионном AES + ключ шифрую на RSA а уже его ключ сохраняю в KeyStore. Но у меня там персональные данные - хз будлет ли оправданно такое для вашего случая.
Rou1997: Ну это не моя статья, а официальная документация Гугла. То что их никто не юзает - согласен, но это на совести разработчиков - я все же их встречал в некоторых библиотеках.