|
|
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Atum1тут самое главное понять выбросит компилятор проверки или нет ...В чём проблема глянуть байт код через (уже) ява-пюре JD-GUI ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 18:32 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Atum1, дык... здесь не if тормозит а его тело. Ну ты шутник блин. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 19:47 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, примеры хорошие. Но я акцентировал внимание когда код-под нагрузкой. События генерируются миллионы раз в секунду. Либо нет места куда писать (прошивка сетевого устройства). P.S. Я не против логов вообще. Я даже их большой любитель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 23:43 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
[quot Partisan M]DymytryРешил на досуге изучить вопрос влияния логгирования на производительность. 2) Задать, чтобы команды логирования срабатывали только при достаточном уровне. Например, в log4j (или LogBack) это будет выглядеть как: Код: java 1. 2. 3. Эта предосторжность может иметь смысл, если для создания сообщения требуется существенная работа. 3) Вместо log4j (самая популярная библиотека) по возможности использовать LogBack (автор log4j и LogBack утверждает, что LogBack быстрее. Я не проверял). 1. в LogBack есть асинхронное логирование (с кешем) - заметно быстрее при большой нагрузке, но лог файлы обновляются большими кусками; 2. Используйте slf4j фасад от того же автора (он работает и с log4j и с другими логгерами через редиректоры) - в нем не нужно тащить if (logger.isDebugEnabled()) так как поддерживаются темплейты и строка не склеиваться перед вызовом - поддерживается до 4х позиций в темплайте - к примеру - logger.debug("Some param={} and another param={}", param1, param2); 3. Можете попробовать грязный хак - если используете разные билды - для дебаггинга и для продакшн - if(DEBUG_BUILD_STATIC_BOOLEAN) { logger.debug("message"); } - При компиляции javac его может выпилить. Для таких злобных циклов не вижу смысла логгировать миллион одинаковых строчек с одним полезным словом, удобнее собрать массив и потом уже его вывести в 10 или 16-ричном формате (матрицу), как в excel. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 06:31 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
maytonAtum1, дык... здесь не if тормозит а его тело. Ну ты шутник блин. =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 10:30 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovВы, блин, контекст не теряйте - чтобы условный оператор тормозил на фоне тормозов ввода-вывода ... Мы же договорились, что ввод-вывод мы выкидываем в отдельный поток на отдельный канал ввода-вывода. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 11:56 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
И да - выкидывать логику с проверкой установленного уровня логгирования и подключенных аппендеров на верх, перед вызовом logger.debug(...), это как-то моветон. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 11:58 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
maytonНо я акцентировал внимание когда код-под нагрузкойВ очередной раз повторю, что на прошлой работе я администрировал промышленную систему регионального уровня. Регион у нас не особо населённый, система не особо нагруженная, но проблем с производительностью логирования - не было. Проблемы с производительностью системы - были, с производительностью логирования - не было.События генерируются миллионы раз в секунду.Теперь давайте вы приводите практический пример. Брать цифры с потолка и я умею.Либо нет места куда писать (прошивка сетевого устройства)Теоретики вы, блин, теоретики ... Вот когда практикующий админ публиковал на fido-online "методичку" по удалённому обновлению FreeBSD4 до FreeBSD7 - было интересно: человек многое предусмотрел и продумал, а "шить сетевое устройство" ... Ну обновлял я прошивки пары HP LaserJet разных моделей по сети - вообще ничего волнующего и логи не интересны. Вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 16:23 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевМы же договорились, что ввод-вывод мы выкидываем в отдельный поток на отдельный канал ввода-вывода. :)Да хоть в dev/nul - я приводил примеры и с null-appender, да и переназначить вывод в "реальный nul" - не проблема. Только накладные расходы на ввод-вывод это не убирает. Исчезает (только) запись на физическое устройство, а это далеко не всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 16:27 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Про прошивку ты не понял. Я вообще не то имел в виду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 17:36 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевИ да - выкидывать логику с проверкой установленного уровня логгирования и подключенных аппендеров на верх, перед вызовом logger.debug(...), это как-то моветон. Моветон конечно если вызов намного дороже получается, в log4j примерно так и было - основная стоимость это не проброс наверх и проверка уровня логирования а склейка строки сообщения. Если же склейки сообщения перед вызовом не происходит то не намного дороже но код намного чище и меньше вероятность Copy/Paste ошибки (не то условие в if(logger.is...). Проверка на уровень логирования и склейка сообщения происходит внутри враппера логгера (slf4j). На данный момент сижу и выпиливаю if для логеров log4j из старого приложения (перевожу на slf4j wrapper). Изначально поставлена задача некорректно - логирование нагруженного цикла. В этом случае лучше делать дамп массива данных один раз после цикла (или периодически). Подобные задачи у меня были при обработке графики, там приходилось выкидывать все лишнее из циклов, целочисленное деление сплошь и рядом применять (вместо double), а здесь - логи в Loop на миллион циклов. Кто их читать сможет? В многопоточном приложении будет просто лапша перемешанная на миллионы строчек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 17:59 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
maytonПро прошивку ты не понял. Я вообще не то имел в виду.Я всё ещё жду практический пример. P.S. Если у сетевого устройства нет устройства хранения, то у него есть syslog/SNMP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 18:19 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
uid uniqueа здесь - логи в Loop на миллион циклов. Кто их читать сможет?Их не читают. Смотрят на итоговую строку при разных настройках логгеров и понимают, что log4j совсем не такой страшный, как его малюют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 18:21 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovmaytonПро прошивку ты не понял. Я вообще не то имел в виду.Я всё ещё жду практический пример. P.S. Если у сетевого устройства нет устройства хранения, то у него есть syslog/SNMP. Вот тебе еще пример. Видеокодек. Необходимо фиксировать пропущенные кадры. Кадры с сбойной контрольной суммой или ошибки синхронизации для VBR. Что для этого тоже нужно в лог писать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 19:25 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
maytonВидеокодек. Необходимо фиксировать пропущенные кадры. Кадры с сбойной контрольной суммой или ошибки синхронизации для VBR. Что для этого тоже нужно в лог писать?Или то, что перечислено или "В чём подвох?" P.S. Непонятно, каким образом в этом примере возникли "миллионы событий в секунду" и "прошивка сетевого устройства". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 19:42 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Test.java Код: sql 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. log4j.xml Код: xml 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. результат с комментариями Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. "LogLevel - TRACE" - соединение строк и вывод в NULL-аппендер. Который, как следует из его названия, никуда и ничего не пишет. Вроде, всё очевидно - если логирование корректно настроено, то: 1. Составлять строчку для сообщения "плюсиками" - нефатально; 2. Накладные расходы на ввод-вывод - достаточно высоки; 3. Протоколирование из многих потоков заметно только тогда, когда этих потоков [i]действительно много . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 19:53 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Ладно. Давай на этом закончим. Я просто хотел подытожить что когда мне нужен перформанс от логгирования я НЕ ЛОГГИРУЮ вообще а веду учёт событий класса АНАЛИТИКА от лог-файла. До сегодняшнего дня мне это удавалось. Кроме тех случаев когда в message толкали текстовый файл построчно или нужно было фиксировать timestamps. Впрочем последнее было крайне редко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 19:55 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Странные вы, всё-таки, люди ... "Не логирую вообще" и тут же "аналитика лог-файла". "timestamp нужен крайне редко", хотя формирование этих штампов делает сама библиотека и думать об этом вообще не надо. Вот измерять интервалы, да - "только хардкор". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 20:02 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
может бинарный лог попробовать? + ssd диски? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2015, 14:58 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Не знаю, было ли уже в данной теме. Наткнулся на интересный документ: Проверка утверждений (assertions) и условная компиляция В конце статьи приводится пример с условной компиляции. Лично для меня это было новой информацией. Может еще кому интересно будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 12:17 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Atum1может бинарный лог попробовать? На запись они одинаковы. Бинарность была-бы бонусом если-бы нужно были вычитывать потом из этого файла records по номерам или индексировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 12:29 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevЛично для меня это было новой информацией 18441954 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 16:44 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39111595&tid=2124392]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
156ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
81ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 518ms |

| 0 / 0 |
