|
|
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Добрый день . Собственно интересует сама методология , ваш подход , как вы определяете уровни логирования , в какой момент и как пишите в лог итд ... Насколько детально ваш код покрыт логами (на 100 строк бизнес кода) итд ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 08:59 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Atum1, Сильно зависит от нагрузки. Если приложение рассчитано на 50+ запросов в секунду, особо не пологгируешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 09:32 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Atum1Собственно интересует сама методология , ваш подход , как вы определяете уровни логирования , в какой момент и как пишите в лог итд ... Насколько детально ваш код покрыт логами (на 100 строк бизнес кода) итд ... TRACE - уровень на котором выводится полная информация о данных. Дампы запросов, объектов, XML и т.п. DEBUG - уровень анализа - покрывает ВСЕ ветвления кода, чтобы по логу было видно весь сценарий по которому работала программа. INFO - менее детальный аналог DEBUG - покрывает наиболее критичные изменения состояния системы. WARN - подозрительные ситуации, которые не критичны для отработки сценария, но которые не ожидаются при штатной работе системы. ERROR - все сбои FATAL - критичные сбои при которых дальнейшая работа системы не возможна. В принципе особой пользы в этом уровне нет, можно и в ERROR логировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 10:01 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
scfСильно зависит от нагрузки. Если приложение рассчитано на 50+ запросов в секунду, особо не пологгируешь. Ерунда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 10:01 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Вы это, мысль раскройте пошире. 50 запросов в секунду по 1 кб на запрос - это 4 гига логов в сутки. А нагрузки бывают и выше, а системы бывают и микросервисные, и каждый микросервис должен что-то логгировать. Так что логгирование приходится вести очень аккуратно. У вас какой-то другой опыт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 10:08 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
scfВы это, мысль раскройте пошире. Взаимно. scf50 запросов в секунду по 1 кб на запрос - это 4 гига логов в сутки. У вас фиксированое количество логов на каждый запрос? scfА нагрузки бывают и выше, а системы бывают и микросервисные, и каждый микросервис должен что-то логгировать. Так что логгирование приходится вести очень аккуратно. У вас какой-то другой опыт? Бывает. А бывает и кластер игрового сервера с тысячами клиентов онлайн. И логируется не только работа сервера, но и GC лог включен. Ну, и 4 гига это же фигня в наше время. Недельный лог вполне можно хранить. А если ещё и про компресиию вспомнить, то и вообще за месяц можно собрать данные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 10:14 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Вообще логгирование - это тема обширная и почему-то плохо освещенная в литературе. Размер на запрос, конечно, не фиксированный, но границу снизу и сверху почти всегда можно назвать. С хранением все немного сложнее, т.к. логи не хранятся мертвым грузом. Они парсятся, индексируются и складываются в централизованное хранилище, их анализирует алертинг, по ним строятся всякие-разные графики. У нас используется такая классификация логов: - трассировка (по умолчанию выключена) - отладочные (включены только local/dev) - сетевые (логгирование запроса и ответа) - аудит (логгирование действий пользователя, имеющих смысл для аудита) - инфо (большая часть их не относится к индивидуальным запросам, скорее они обозначают изменение состояние приложения - т.е. запуск и какие-то перенастройки) - неинтересные/ожидаемые ошибки (ошибки валидации входных данных, некоторые сетевые ошибки) - т.е. формально ошибки, но они никому не интересны, разве что в виде статистики - внезапные ошибки (типичный пример - NPE) - ошибки, требующие внимания системного администратора - ошибки, требующие немедленного внимания системного администратора Уровни логгирования тут важны постольку-поскольку - главное, чтобы нужные категории логов было удобно фильтровать по уровню логгирования + чтобы парсер мог уверенно различать разные типы логов. Вообще, я повторюсь, тут можно на целую статью материала накатать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 10:26 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Наиболее встречающийся вариант: 1.При создании класса и на начальном этапе все прямо правильно логгер даже заинжектен, все как надо. 2.В процессе разработки/отладки добавляется System.out.println() 3.Вроде бы отлажено и сделано, ну надо логи добавить - такыются везде info "на отвали". 4.Вроде как-то работает криво, в лог пишется какая-то каша, обычно лог открывают далее Ctrl+F Exception. 5.Если размер лога покажется большим, его тупо удаляют. Вот как-то так))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 10:48 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
no56892такыются везде info "на отвали". жизненно )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 10:58 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAtum1Собственно интересует сама методология , ваш подход , как вы определяете уровни логирования , в какой момент и как пишите в лог итд ... Насколько детально ваш код покрыт логами (на 100 строк бизнес кода) итд ... TRACE - уровень на котором выводится полная информация о данных. Дампы запросов, объектов, XML и т.п. DEBUG - уровень анализа - покрывает ВСЕ ветвления кода, чтобы по логу было видно весь сценарий по которому работала программа. INFO - менее детальный аналог DEBUG - покрывает наиболее критичные изменения состояния системы. WARN - подозрительные ситуации, которые не критичны для отработки сценария, но которые не ожидаются при штатной работе системы. ERROR - все сбои FATAL - критичные сбои при которых дальнейшая работа системы не возможна. В принципе особой пользы в этом уровне нет, можно и в ERROR логировать. Это я понимаю . Вопрос немного о другом - как вы определите в своем коде нужна в этой строке строка с логгером и какого уровня. Не после каждой же строки писать вывод в лог? Если ли какой-то документ разработанный внутри вашей команды программистов - как покрывать код логами . чтобы открыв люобй файл с кодом вы увидели достаточно ли там логов или нет ... к тому же логгеры в коде - достаточно мусорный код получается ?! можно и через аспекты все логировать . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 13:42 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
scfBlazkowicz, Вы это, мысль раскройте пошире. 50 запросов в секунду по 1 кб на запрос - это 4 гига логов в сутки. А нагрузки бывают и выше, а системы бывают и микросервисные, и каждый микросервис должен что-то логгировать. Так что логгирование приходится вести очень аккуратно. У вас какой-то другой опыт? вот тут они логируют любое движение курсора - потому хотят понять по нему о чем думал пользователь ... https://habrahabr.ru/company/badoo/blog/280606/ ИМХО это перегиб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 13:45 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Atum1вот тут они логируют любое движение курсора - потому хотят понять по нему о чем думал пользователь ... https://habrahabr.ru/company/badoo/blog/280606/ ИМХО это перегиб. Статью не читал. Но по поводу перегиба - смотря для чего. Если on-line игры, то могут пытаться ботов вычислять. Поиск ботов, я так понимаю, одна из основных задач в on-line игровом бизнесе, дабы бото-воды монитизацию сжирают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 13:57 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Atum1, на такой вопрос тебе никто не ответит. Увы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 14:37 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Atum1, как вариант: - если программист хороший, то он вслепую, без логов что объект создан....пишет код. И заполняет только Error...try А дальше - требования компании. Не знаю, скрин кто выложит тут или нет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 14:41 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Petro123, Это да ... В одном из проектов : Я логи убрал в Аспекты - получилось всё завернуто в логи - каждый метод и каждый параметр таким образом ... уровень так же проставляется - код чистый итд ... если NPE - или ошибка в критической секции - то сразу , но асинхронно письмо на саппорт что там то и там то ошибка и стек трейс всем разработчикам полная инфа в письме + сразу в редмайне таск открывается . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 15:38 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Atum1Petro123, Это да ... В одном из проектов : Я логи убрал в Аспекты - получилось всё завернуто в логи - каждый метод и каждый параметр таким образом ... уровень так же проставляется - код чистый итд ... если NPE - или ошибка в критической секции - то сразу , но асинхронно письмо на саппорт что там то и там то ошибка и стек трейс всем разработчикам полная инфа в письме + сразу в редмайне таск открывается . Потом тригерится событие на автофиксинг, заливается в репозиторий оттуда континус интегрэйшн прогоняет тесты и выкладывает на прод. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 15:46 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
no56892, + ДА есть дженкинс который все это собирает - прогоняя 100500 тестов , если все ок - то пакует все в докер (docker) и выкладывает в Хаб откуда это берут и разливают по серверам ... но это история не про логирование . Мне интересно методология логирования :) кроме Petro123вот тебе привели - жизнь )) 19610928 в инете нет достойных статей - все на интуиции и на совести разработчика ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 16:26 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
scfAtum1, Сильно зависит от нагрузки. Если приложение рассчитано на 50+ запросов в секунду, особо не пологгируешь. как то раз мы обнаружили, что нас досят, как раз потому что место кончилось - все логами забилось :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 16:33 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
авторСильно зависит от нагрузки. Если приложение рассчитано на 50+ запросов в секунду, особо не пологгируешь. Async logging на другой комп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 16:44 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
no56892, другой комп тоже не резиновый. А так да, в приличном обществе принято логгировать на отдельный примонтированный раздел, чтобы ОС не страдала от нехватки места если что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 16:53 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Atum1Собственно интересует сама методология , ваш подход , как вы определяете уровни логирования , в какой момент и как пишите в лог итд ... Насколько детально ваш код покрыт логами (на 100 строк бизнес кода) итд ... Всё это - вопрос вкуса. Уровни- на тестовом сервере и локально включен debug, на продакшн- info. Обычно влючать весь trace опасно- завалит нафиг, надо включать для конкретных потоков. На error логи обычно вешается что-нибудь вроде sentry, которая позволяет не проморгать проблемы. Плюс в zabbix. На интеграционных тестах это повод считать тест заваленным. Вот что делать с warn не очень понятно. На проде никто читать это не будет, на тесте и локально- не увидишь. Тут, честно, я в замешательстые. Разве что так же в sentry пихать (и НЕ пихать в zabbix). В дойч-банке (по крайней мере в high-load части) есть традиция писать только info и debug. Я работал в группе, где такое внедрили. Неудобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 16:57 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Atum1к тому же логгеры в коде - достаточно мусорный код получается ?! можно и через аспекты все логировать .Вы неправильно подходите к протоколированию. Есть две задачи - аудит и собственно протоколирование. Аудит не знаю, а протоколирование это замена отладчика, т.к. рано или поздно возникнет ситуация, когда ничего, кроме лога у вас просто не будет, а "на тесте" или/и "под отладчиком" проблема не воспроизведётся. Соответственно, протоколировать надо так, чтобы читая лог вы понимали что происходило в системе. Как минимум, протоколироваться должны все сомнительные места и так, чтобы расхождение реального поведения с ожидаемым вызывало запись нужного вам уровня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 18:29 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Alexey TominВот что делать с warn не очень понятноНа самом деле, ещё notice не хватает На проде никто читать это не будетЕсли всякую фигню пихать - да, поэтому в предупреждениях должна быть информация к размышлению для админа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 18:31 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovAtum1к тому же логгеры в коде - достаточно мусорный код получается ?! можно и через аспекты все логировать .Вы неправильно подходите к протоколированию. Есть две задачи - аудит и собственно протоколирование. Аудит не знаю, а протоколирование это замена отладчика, т.к. рано или поздно возникнет ситуация, когда ничего, кроме лога у вас просто не будет, а "на тесте" или/и "под отладчиком" проблема не воспроизведётся. Соответственно, протоколировать надо так, чтобы читая лог вы понимали что происходило в системе. Как минимум, протоколироваться должны все сомнительные места и так, чтобы расхождение реального поведения с ожидаемым вызывало запись нужного вам уровня. +1 лучше и не скажешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 18:52 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovAlexey TominВот что делать с warn не очень понятноНа самом деле, ещё notice не хватает На проде никто читать это не будетЕсли всякую фигню пихать - да, поэтому в предупреждениях должна быть информация к размышлению для админа. Ну в zabbix писать warn это жёстко. А вот в sentryи потом читать статистику- да, полезно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 20:38 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Atum1Добрый день . Собственно интересует сама методология , ваш подход , как вы определяете уровни логирования , в какой момент и как пишите в лог итд ... Насколько детально ваш код покрыт логами (на 100 строк бизнес кода) итд ... Вечный вопрос. Я думаю нужно во первых - спросить бизнес. А что собсно вы хотите видеть в логах? Я думаю (условно) существуют 3 базовых категории логгирования: Системная (ошибки IO/Network) Бизнес (открытие-закрытия) Безопасность (логон-логофф) Вот так и пишите. Делать логгирование с избытком - нет особого смысла. Java по умолчанию компилирует в режиме -g:all тоесть информация о строках сохраняется в бинарнике. В случае Exception - выпадает номер строки исходного файла где стрельнуло. Все прочие параноидальные способы логгирования не имеют смысла. Опытный разраб и так знает где проблема. А логгировать OK через каждую строку тоже нет смысла по причине которую я описал выше. Для облегчения контекста логгирования можно использовать MDC из Log4j 1.7 или ThreadContext из 2.0 вместе с конфигурациями. +Почитайте про AOP в Spring. Можно аннотировать аргументы в вызове методов и это будет командой к логгеру. Но. Самое главное. Что-бы вы не делали. Кто-то должен читать эти сообщения. Если никто не читает то возникает вопрос целесообразности. Если не можете аргументировать - то и логгировать не стоит вообще. Это соображение не пустое а продиктованное многолетним наблюдением за эксплуатацией более чем десятка систем и взаимодействием с секторами внедрения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2016, 21:23 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAtum1Собственно интересует сама методология , ваш подход , как вы определяете уровни логирования , в какой момент и как пишите в лог итд ... Насколько детально ваш код покрыт логами (на 100 строк бизнес кода) итд ... TRACE - уровень на котором выводится полная информация о данных. Дампы запросов, объектов, XML и т.п. DEBUG - уровень анализа - покрывает ВСЕ ветвления кода, чтобы по логу было видно весь сценарий по которому работала программа. INFO - менее детальный аналог DEBUG - покрывает наиболее критичные изменения состояния системы. WARN - подозрительные ситуации, которые не критичны для отработки сценария, но которые не ожидаются при штатной работе системы. ERROR - все сбои FATAL - критичные сбои при которых дальнейшая работа системы не возможна. В принципе особой пользы в этом уровне нет, можно и в ERROR логировать. Вопрос филосовский, что есть ERROR, а что INFO. Есть подсистема работы с БД, ее попросили создать объект. База вернула ошибку "INDEX DUPLICATED". С точки зрения этой подсистемы - это уровень ERROR (запрос не выполнился - это плохо), а с точки зрения бизнес логики, которая эту подсистему пользует - это может быть и INFO - а то и вообще DEBUG (попытались создать объект, убедились что он есть и пошли по другой ветке алгоритма). Вечный спор у меня с аналитиками на эту тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 01:13 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Maxifly, Если лог ИС а не подсистемы, то и выводить ERROR информационной системы. По бизнес логике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 09:20 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
MaxiflyЕсть подсистема работы с БД, ее попросили создать объект. База вернула ошибку "INDEX DUPLICATED". С точки зрения этой подсистемы - это уровень ERROR (запрос не выполнился - это плохо), а с точки зрения бизнес логики, которая эту подсистему пользует - это может быть и INFO - а то и вообще DEBUG (попытались создать объект, убедились что он есть и пошли по другой ветке алгоритма). Вечный спор у меня с аналитиками на эту тему. Лог не для аналитиков. Тут как раз можно ввести систему аудита. На уровне подсистемы это exception. Кинули и забыли. В момент создания exception логи не пишутся. На уровне бизнес-логики мы его поймали и поправили. Вывести INFO/DEBUG - вопрос вкуса. Записать ли в аудит- это пусть аналитик скажет. Но аудит это не лог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 09:49 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin В момент создания exception логи не пишутся. И как Вы потом разбираетесь, почему какое-то действие не выполнено было? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 09:57 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Petro123Basil A. Sidorovпропущено... Вы неправильно подходите к протоколированию. Есть две задачи - аудит и собственно протоколирование. Аудит не знаю, а протоколирование это замена отладчика, т.к. рано или поздно возникнет ситуация, когда ничего, кроме лога у вас просто не будет, а "на тесте" или/и "под отладчиком" проблема не воспроизведётся. Соответственно, протоколировать надо так, чтобы читая лог вы понимали что происходило в системе. Как минимум, протоколироваться должны все сомнительные места и так, чтобы расхождение реального поведения с ожидаемым вызывало запись нужного вам уровня. +1 лучше и не скажешь. +1 Да , скорее так - идеологические логирование нужно для восстановления последовательности действий при возникновении нештатной ситуации как вариант , чтобы увидеть ход процесса исполнения бизнес кода ... понять нарушена логика или нет ?! вроде так .... следовательно логировать нужно последовательность действий . Запись логики . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 10:35 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Atum1следовательно логировать нужно последовательность действий в уровне Debug. в уровне Error - сигнальная схема только сигнализирующая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 11:18 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Petro123Atum1следовательно логировать нужно последовательность действий в уровне Debug. IMHO вся последовательность со всеми данными - это trace. debug - те места, которым понадобилась отладка. info - основные вехи warn - допустимое, но нетипичное поведение (данные) или не очень комильфо. error - что-то типа, а диска то на который надо писать лог нет. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 11:24 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевIMHO вся последовательность со всеми данными - это trace. вот именно максимализм в слове ВСЯ меня пугает. Есть код очистки списков. Обычный цикл. Нечего там логировать. Рехнуться можно в классах на 100000 строк кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 11:26 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Petro123Рехнуться можно в классах на 100000 строк кода. Если подходить к таким классам с точки зрения максимализма - тут не то что логированием, тут рефакторингом пахнет. :) Кроме того, полное логирование это хороший запас для увеличения производительности. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 11:42 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Petro123Atum1следовательно логировать нужно последовательность действий в уровне Debug. в уровне Error - сигнальная схема только сигнализирующая. ну когда в прод навернется что то нужна будет именно Debug а не урезанная Error :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 14:50 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Atum1ну когда в прод навернется что то нужна будет именно Debug а не урезанная Error :) ммммм. Можно по разному. Можно же написать переход в уровень debug сразу после райзе. Или по команде админа в горячем режиме. Как навернётся, так и включим для разбора что произошло. Иначе у вас продакшен не отличается от тестового. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 15:54 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
MaxiflyЕсть подсистема работы с БД, ее попросили создать объект. База вернула ошибку "INDEX DUPLICATED". С точки зрения этой подсистемы - это уровень ERROR (запрос не выполнился - это плохо), а с точки зрения бизнес логики, которая эту подсистему пользует - это может быть и INFO - а то и вообще DEBUG (попытались создать объект, убедились что он есть и пошли по другой ветке алгоритма). Вечный спор у меня с аналитиками на эту тему. Если у вас запросы постоянно долбятся в constraint, а Exception является частью сценария, то это повод задуматься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 16:00 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
MaxiflyAlexey Tomin В момент создания exception логи не пишутся. И как Вы потом разбираетесь, почему какое-то действие не выполнено было? Всё должно быть опсано в exception. Потом, если это оказалось реально ошибкой, то этот exception логируется. Иначе да, получается "тут не получилось, мы напишем в лог ERROR'ов, кинем exception" а для клиента это нормальная ситуация и в логах будет куча ERROR'ов, которые не ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 16:14 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Alexey TominВсё должно быть опсано в exception. Потом, если это оказалось реально ошибкой, то этот exception логируетсяРечь, насколько я понимаю, несколько о другом. Например, ошибки ввода-вывода, как правило, не поддаются никакому контролю с вашей стороны, поэтому кинуть исключение - разумно. Но, даже если схема базы "исторически сложилась" - проектировали-то её под конкретную задачу. Поэтому глупо "на авось" создавать объекты и ловить исключения там, где должна быть штатная процедура, отрабатывающая штатный же сценарий использования. Исключения в такой процедуре, конечно могут быть, но они должны быть именно что сигналом ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 16:23 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Alexey TominВсё должно быть опсано в exception. Потом, если это оказалось реально ошибкой, то этот exception логируется. Иначе да, получается "тут не получилось, мы напишем в лог ERROR'ов, кинем exception" а для клиента это нормальная ситуация и в логах будет куча ERROR'ов, которые не ошибки. Отличное замечание. Точно в цель. Когда ты начинаешь игнорировать Exception-ы и считать их штатным workflow, то возникает отличный шанс проигнорировать исключение, которое вызвано реальным сбоем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 16:42 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczКогда ты начинаешь игнорировать Exception-ы и считать их штатным workflow, то возникает отличный шанс проигнорировать исключение, которое вызвано реальным сбоем.Возникает, но такова суровая правда жизни. Как пример - всё тот же ввод-вывод. Если исключение вызвано отвалившимся диском - это сигнал тревоги для системы мониторинга, а точно такое же исключение при чтении HTTP-запроса - запись в логе уровня info, как максимум . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 16:52 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAlexey TominВсё должно быть опсано в exception. Потом, если это оказалось реально ошибкой, то этот exception логируется. Иначе да, получается "тут не получилось, мы напишем в лог ERROR'ов, кинем exception" а для клиента это нормальная ситуация и в логах будет куча ERROR'ов, которые не ошибки. Отличное замечание. Точно в цель. Когда ты начинаешь игнорировать Exception-ы и считать их штатным workflow, то возникает отличный шанс проигнорировать исключение, которое вызвано реальным сбоем. моно примеры на пальцах двух ваших высказываний? Пример такой ситуации и пример логирования кода ... для нее ?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 18:05 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
С exception бывает вообще замечательно: В Oracle CC&B warning'и кидались Exception'ом. Но можно было выставить флаг, что бы они не кидались. Жесть. Сначала выполняем код - получаем Exception, который warning. Потом нужно еще раз запустить этот код с флагом, что бы не кидать warning'и. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 19:05 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Atum1моно примеры на пальцах двух ваших высказываний? Пример такой ситуации и пример логирования кода ... для нее ?! Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. А потом у нас меняется имя констрейнта или вендор БД и эта красота перестаёт работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 19:36 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovAlexey TominВсё должно быть опсано в exception. Потом, если это оказалось реально ошибкой, то этот exception логируетсяРечь, насколько я понимаю, несколько о другом. Например, ошибки ввода-вывода, как правило, не поддаются никакому контролю с вашей стороны, поэтому кинуть исключение - разумно. Да. Basil A. SidorovНо, даже если схема базы "исторически сложилась" - проектировали-то её под конкретную задачу. Поэтому глупо "на авось" создавать объекты и ловить исключения там, где должна быть штатная процедура, отрабатывающая штатный же сценарий использования. Исключения в такой процедуре, конечно могут быть, но они должны быть именно что сигналом ошибки. Вполне может быть так, что уникальность логина нового пользователя контролируется уникальностью в БД. Как результат- БД кидает исключение. С точки зрения слоя ДАО это именно что исключение. Но выше, где-то на уровне UI, оно превращается во вполне стандартное окошко пользователю про то, что такой логин уже есть. Логирование уровня WARN и выше должно быть именно в тот момент, когда уже принято решение относительного того, что делать с ошибкой. До этого можно писать DEBUG или TRACE. INFO - лучше тоже раньше времени не писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 20:06 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Работать с исключениями нужно так как будто они необычайно редкие. Это семантически заложено в сам термин. К примеру если вы парсите CSV файл на OVER миллион строк и отрабатываете NumberFormatException или ParseException при работе с датами то нужно понимать что вы никак не ожидаете миллион выбрасываний этого события иначе ваши мегафлопы будут полностью поглощены механизмом конструирования объектов-исключений. Ставте workaround. Проверка с регуляркой или просто строковые операции чтобы максимально отсрочить выброс этого тяжелого объекта. +Еще разворачивание стека, если вы его логгируете средствами log4j тоже ударит по перформансу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2016, 21:35 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
maytonиначе ваши мегафлопы будут полностью поглощены механизмом конструирования объектов-исключений. Ну а потом появляются методики переиспользования одного и того же объекта ибо для обрабатываемого исключения стек то и не нужен. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2016, 09:23 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
mayton, тут есть момент: тяжеая операция при работе с исключениями - это заполнение стектрейса внутри объекта исключения. Если его не заполнять, то можно получить серьезный выигрыш. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2016, 10:03 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Alexey TominВполне может быть так, что уникальность логина нового пользователя контролируется уникальностью в БД. Как результат- БД кидает исключение. С точки зрения слоя ДАО это именно что исключение. Но выше, где-то на уровне UI, оно превращается во вполне стандартное окошко пользователю про то, что такой логин уже есть.Вся это цепочка - логическая ошибка проектирования. 1. Проверить существование объекта не настолько накладно, чтобы этого нельзя было ещё до вставки. 2. Сегодня ограничение отключат для технологической операции, а потом не включат или потому, что забыли или потому, что "реально дубль, но всем пофиг, т.к. увидят штатное исключение, но только на уровне DAO". А послезавтра начнут рвать волосы на разных частях тела, т.к. дублей станет существенно больше трёх. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2016, 16:44 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
mayton+Еще разворачивание стека, если вы его логгируете средствами log4j тоже ударит по перформансу. JVM обнаружит часто выкидываемое исключение и выкинет из него stacktrace нафиг, ибо нефиг. Разве не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2016, 17:40 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov1. Проверить существование объекта не настолько накладно, чтобы этого нельзя было ещё до вставки. Ну проверил. Нету. Вставил- а уже есть. Мало ли кто ещё вставляет. Каждому своё. БД хорошо обеспечивает уникальность- пусть делает. Но пусть будем - insert from select where not exists- но всё одно- то, что exception в точке его создания, может оказаться нормальной ситуаций выше. Как пример- мы знаем, что связь плохая и выше делаем N попыток выполнить сетевой запрос. Или просто (внешний) сервис иногда может 500 возвращать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2016, 22:06 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Alexey TominНу проверил. Нету. Вставил- а уже есть. Мало ли кто ещё вставляет.Совершенно верно. Только это уже будет однозначная ошибка. Не техническая, так организационная. А не "здесь - рыба, там - не играем".Как пример- мы знаем, что связь плохая и выше делаем N попыток выполнить сетевой запрос. Или просто (внешний) сервис иногда может 500 возвращать.А зачем люди с конями мешаются в одну кучу??? Про N попыток авансом - вообще шедевр, а вставка дубля должна возвращать "400 Bad request", что никак не пересекается с 5xx группой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2016, 10:37 |
|
||
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovКак пример- мы знаем, что связь плохая и выше делаем N попыток выполнить сетевой запрос. Или просто (внешний) сервис иногда может 500 возвращать.А зачем люди с конями мешаются в одну кучу??? Про N попыток авансом - вообще шедевр, а вставка дубля должна возвращать "400 Bad request", что никак не пересекается с 5xx группой. Я не об этом. Внешний сервис может быть с багами- такова жизнь. Говоришь "сделай нечто", а он такой "уйди старушка, я в печали"- 500 тебе в морду. А то и 400 кинет- когда как. Делаешь ещё раз- о, сработало. Сервис внешний, багрепорты можно слать сколько угодно. Да, можно передавать в метод "сделай N попыток", но это уже когда совсем клиника (или просто ошибки сети). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2016, 08:56 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2123755]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 346ms |

| 0 / 0 |
