|
|
|
Как и что вы логируете ?
|
|||
|---|---|---|---|
|
#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 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39302297&tid=2123755]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
128ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
78ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 477ms |

| 0 / 0 |
