|
|
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевЕсли вывод в журнал идет на отдельный канал ввода-вывода с независимым массивом дисков и основной поток занят работой, а не только сбросом информации в журнал... то в этом случае логирование нас вряд ли нагружает и без выкрутасов.Нет. Я конечно представляю себе как встроить препроцессор который будет высматривать в коде макросы условной компиляции перед передачей их javac и как устроить инвалидацию загруженных классов в класслоадере и подсовывание прошедших компиляцию через препроцессор. Но чисто теоретически. На практике до такой фигни руки не доходили. И вряд ли дойдут.Когда мне захотелось сделать так, чтобы отладочная версия приложения собиралась отдельно, чтобы я определил "public final static" флаги и сделал обёртку, которая начиналась с "if (глобально | локально) return;". Это позволяло глобально включить отладку или глобально отключить, но включить в отдельной иерархии классов. Обёртка делала, разумеется, делала несколько больше, чем (примитивное) управление сборкой и однострочная выдача. Не так кошерно, как препроцессор и сохраняет все недостатки раздельной сборки realease/debug, но имеет право на жизнь и не требует никаких извращений. Это я всё к тому, что иногда "желание странного" должно наказываться. Чтобы не желали. P.S. Серверная JVM умеет генерировать более оптимальный (машинный) код, а не то, что вы подумали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 15:56 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovКогда мне захотелось сделать так, чтобы отладочная версия приложения собиралась отдельно Это то понятно. Я про вариант включить отладку в каком-нибудь наборе классов, назовем его драйвером, на лету. И выключить, когда стало понятно в чем дело. Вариант 1. Статический - логгер всегда вызывается и ему передаются параметры, а уж он сам внутри разбирает, надо или нет отсюда принимать сообщения. Вариант 2. Динамический. Часть кода вызывающая логгер включается и выключается. Блеск джавы в том, что это можно провернуть практически из коробки, в отличии от статически компилирующих систем. А нищета в том, что это "моветон" и поэтому надо очень постараться, чтобы такое провернуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 17:21 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевЯ про вариант включить отладку в каком-нибудь наборе классов, назовем его драйвером, на лету. И выключить, когда стало понятно в чем дело"... ты только не обижайся" (ц) х/ф "Мимино". Не знаю почему это не сделано искаропки, но достаточно дёрнуть configureAndWatch и настройки протоколирования будут меняться по мере надобности. Насколько мне известно, log4j 1.x может терять сообщения при такой перенастройке, но не факт, что это критично. Т.е. мы опять приходим к тому, что есть рабочее решение, но хочется изобрести своё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 18:32 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Странно что в топике никто не вспомнил про шаблон Strategy. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 22:56 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovТ.е. мы опять приходим к тому, что есть рабочее решение, но хочется изобрести своё. Еще раз в log4j есть коробочное решение позволяющее в этом фрагменте кода Код: java 1. не выполнять Код: java 1. если установлен уровень, при котором debug игнорируется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 11:32 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевЕще раз в log4j есть коробочное решение позволяющее в этом фрагменте кодаЕщё раз - вы уже продемонстрировали, что это критично? P.S. Я, как бы, шесть лет администрировал промышленную систему, где на практически каждую ошибку разработчики отвечали "требуются отладочные логи". И всего один раз, когда им требовалось прикрыть честь мундира, среди прочих придирок было указано, что их волшебный пузырёк в виде собственного аппендера не использовался и это, якобы, создало фатальные проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 16:18 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Мы рассматриваем теоретическую возможность или практику. На практике чаще всего, если не перегибать палку с полным протоколированием каждого чиха это действительно редко важно. Ну разве что сериализация объекта i в методе toString() не занимает пол часа. :) С точки зрения большинства реальных задач, не требующих максимальной производительности, как я уже писал, гораздо лучше, чтобы логгер не изменял своего влияния на работающую систему, чем не оказывал его, когда не надо. Поэтому задача ТС про нетормозящее логгирование, для меня больше академическая, чем реальная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 13:49 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
На самом деле логгирование высоконагруженных участков кода - это в корне неверная идея. Что там ловим? Я-бы предложил завести целочисленные счетчики в code-blocks и вести учёт количества событий. Тоесть если ставится вопрос - а были ли исключения класса Х или ошибки типа Y или срабатывал ли кейс Z - то этот вариант успешно работает. Сбрасывать состояние счётчиков можно в обычный лог по времени (раз в сутки), по финализатору или по спец-методам деструкции для контейнеров или по "кнопке" если есть JMX. Мой вариант отчёта - всегда компактен не флудит простынями текстовых файлов и самое главное - он не ударяет по производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 14:34 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
maytonНа самом деле логгирование высоконагруженных участков кода - это в корне неверная идея +1 Хотя это противоречит теме)). ЗЫ. Например в SSO сервере шибболе, есть замечательная возможность в рантайме включить нужный уровень логирования. И через минут 10 у вас побегут более подробные логи. Подебажили и выключили. Да, противоречит топику, но ...красиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 14:44 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Я готов удивиться вместе с вами. И поцокать языком. Но обычно у меня подобные задачи возникали всего пару раз в жизни. Первое - была проверка гипотезы. Заходим-ли мы в if- блок хотя-бы раз в месяц. Это был баг безопасности. И я его подтвердил. За месяц было 2-3 события. Второе - был сбор статистики. Нужно было учесть каких событий в процентном соотношении больше. События не фиксировались в БД и был вариант реализовать это только в java-коде. Реализовал. Посчитали. Фиксировать в логах было невыгодно т.к. high-лоад и админы паниковали. Насчёт места. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 14:51 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
maytonНа самом деле логгирование высоконагруженных участков кода - это в корне неверная идеяНа самом деле неверной является идея, что некоторые участки кода табуированы для протоколирования. У протоколирования есть вполне конкретные практические задачи. Конкретно программистов, обычно, касается задача "найти ошибку постфактум".Что там ловим?Что надо, то и ловим. И это может быть и заранее предусмотренный сценарий и "затычка по месту на конкретную проблему".Мой вариант отчёта - всегда компактен не флудит простынями текстовых файлов и самое главное - он не ударяет по производительности."Маша наклеила девяносто марок, а профессор - только десять. Но зато все правильно" (ц) Е.Успенский, "Двадцать пять профессий Маши Филипенко". Компактным должен быть тот протокол, по которому персонал, эксплуатирующий систему получает информацию о работе этой системы. А вот если ищем ошибку, то компактность отходит на второй план. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 15:34 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевМы рассматриваем теоретическую возможность или практикуПрактику.гораздо лучше, чтобы логгер не изменял своего влияния на работающую систему, чем не оказывал его, когда не надо"Мы пойдём простым логическим ходом". Максимально возможный уровень детализации, обычно, trace. Изредка - all. Предлагаете сохранить все накладные расходы на трассировку для уровня info? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 15:39 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
тут несколько моментов : 1) Это разные подходы между : Код: java 1. 2. 3. разное потоки - разное выполнение ... 2) кошерное оформление теста : Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. # Run progress: 83,33% complete, ETA 00:00:15 # Fork: 1 of 1 # Warmup Iteration 1: log4j:WARN No appenders could be found for logger (ru.stoloto.isalnikov.benchmarkfactorial.AATest). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 91,891 ms/op # Warmup Iteration 2: 66,285 ms/op # Warmup Iteration 3: 73,935 ms/op # Warmup Iteration 4: 62,913 ms/op # Warmup Iteration 5: 63,678 ms/op Iteration 1: 61,813 ms/op Iteration 2: 63,478 ms/op Iteration 3: 62,874 ms/op Iteration 4: 63,440 ms/op Iteration 5: 62,798 ms/op Iteration 6: 63,161 ms/op Iteration 7: 63,945 ms/op Iteration 8: 63,840 ms/op Iteration 9: 66,408 ms/op Iteration 10: 63,668 ms/op Result "log": 63,543 ±(99.9%) 1,791 ms/op [Average] (min, avg, max) = (61,813, 63,543, 66,408), stdev = 1,185 CI (99.9%): [61,752, 65,333] (assumes normal distribution) # Run complete. Total time: 00:01:32 Benchmark (n) Mode Cnt Score Error Units AATest.log 10 avgt 10 0,007 ± 0,002 ms/op AATest.log 100 avgt 10 0,057 ± 0,002 ms/op AATest.log 1000 avgt 10 0,591 ± 0,076 ms/op AATest.log 10000 avgt 10 5,968 ± 0,144 ms/op AATest.log 50000 avgt 10 31,255 ± 0,839 ms/op AATest.log 100000 avgt 10 63,543 ± 1,791 ms/op 3) когда вывод в лог пишется как конкатенация - такой код всегда будет выполняться - даже если перед ним будет стоять условие if( тут нужно проверить ) в отличии от форматного кода ... через % - который выполняется в момент вызова - замените : Код: java 1. на Код: java 1. 2. 3. 4. 5. 6. 7. 8. перепишите заново тесты и будет вам счастье :) + результаты тестов сюда - на обозрение ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 15:44 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
4) логгирование через аспекты (АОП / Proxy ) (+ включение/выключение логгирования , когда это требуется ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 15:47 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Atum13) когда вывод в лог пишется как конкатенация - такой код всегда будет выполняться - даже если перед ним будет стоять условие if( тут нужно проверить )Вы уверены: Код: sql 1. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 15:48 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovКомпактным должен быть тот протокол, по которому персонал, эксплуатирующий систему получает информацию о работе этой системы.А вот если ищем ошибку, то компактность отходит на второй план. Вася. Я совершенно не понял твой сарказм. И я буду настаивать на своей правоте в рамках решаемых в этом форуме задач. Давай побольше примеров (хороших и разных) и непредвзятых и я буду думать как с помощью учёта вхождений в codeblocks получить любую ценную для тебя и для нас информацию по ошибкам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 16:04 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovAtum13) когда вывод в лог пишется как конкатенация - такой код всегда будет выполняться - даже если перед ним будет стоять условие if( тут нужно проверить )Вы уверены: Код: sql 1. ? Где то был тест на сам if - (как вариант - задачка на n мерные матрицы с кучей вложенных форов и проверками на if / сложности n3 и выше) так вот сам тест на if - (сама операция сравнения , тоже может сильно тормозить , иногда кто то предлагаю вместо if бросать исключение - но оно кажись тормозит еще больше ... сам if так же писать нужно правильно - раньше советовали сравнивать с 0 как самый быстрый if ... ) ps конечно я не уверен ... искать нужно ... и проверять ... где то давным давно читал ... но если и наврал то без обид ... но очень похоже на правду ... if - тормозит и тормозит конкатенация это 100% - которую нужно заменить на формат ... - который даёт первоманс ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 16:25 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Atum1, припомни плиз условие этой задачки. Там суть наверное не в if была а в изменении сложности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 16:56 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
maytonAtum1, припомни плиз условие этой задачки. Там суть наверное не в if была а в изменении сложности. не именно в if - просто когда if ов много - это реально они реально торомозят т.к. это такты , это лишние проверки итд ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 17:14 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Atum1просто когда if ов много - это реально они реально торомозят не верю. Раз уж у нас академический спор)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 17:21 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Мне тоже не верится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 17:40 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
maytonДавай побольше примеров (хороших и разных) и непредвзятыхНе я заявил об этом баге на вебовском форуме, но наткнувшись на условия, при которых ошибка стабильно воспроизводилась я смог: 1. Доказать, что ошибка вообще есть; 2. Доказать, что ошибка есть в коде, в правильности которого разработчик поначалу не сомневался. И то и другое потребовало вдумчивого ковыряния в отладочных логах . На прошлом месте работы было два случая, когда наличие предупреждения "запрос бла-бла-бла исполняется столько-то секунд" позволило выявить и решить две проблемы. Не критичные, но всё-таки. Был случай когда, наоборот, я просил убрать бессмысленное предупреждение, а несколько позднее точно выяснил , что код, где это предупреждение выдавалось - содержал ошибку. Про то, что на практически любую ошибку от меня требовали отладочных логов - я уже упоминал. Это, что вспомнилось, так сказать, с ходу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 18:27 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
maytonМне тоже не верится. завтра что нибудь придумаю .... :) если вы не троллите :)?! Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. тут самое главное понять выбросит компилятор проверки или нет ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 18:27 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
# Run complete. Total time: 00:03:02 Benchmark (n) Mode Cnt Score Error Units IfTest.testIftest1 1000 avgt 10 1,306 ± 0,023 ms/op IfTest.testIftest1 2500 avgt 10 8,069 ± 0,359 ms/op IfTest.testIftest2 1000 avgt 10 1,009 ± 0,015 ms/op IfTest.testIftest2 2500 avgt 10 6,235 ± 0,218 ms/op IfTest.testIftest3 1000 avgt 10 1,000 ± 0,009 ms/op IfTest.testIftest3 2500 avgt 10 6,083 ± 0,058 ms/op ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 18:28 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39111039&tid=2124392]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
153ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 212ms |
| total: | 470ms |

| 0 / 0 |
