|
|
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Всем хороших выходных! Решил на досуге изучить вопрос влияния логгирования на производительность. Имею простой пустой цикл.. Код: java 1. 2. ... и хочу максимально подробно логгировать переменную i, с минимальным импактом на производительность. 1) просто вставить system.out.println() в цикл. замедляет очень сильно. 2) создать надзирающий daemon поток который печатает эту переменную, она должна быть volatile как по учебнику, замедляет прилично. 3) то же, но переменная без volatile. Ухудшение раз в 10 меньше чем в п.2. Оно почти не связано с потоком, а связано что переменная теперь не локальная. Что я узнать-то хотел. 1) Какой оптимальный алгоритм для реализации этой задачи? Лучше все-таки логгировать из основного потока, или из наблюдающего потока? Предполагаю, библиотеки логгирования решают эту задачу, или есть смысл делать как я? 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2015, 21:42 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
вынести условие Код: java 1. в основной цикл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2015, 00:31 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2015, 10:59 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
условие i % 100000000 не совместимо с "максимально подробно логгировать" Кроме того, такое логгирование, когда другой поток "смотрит" в сырые данные - это вообще как правило, не есть правильно. Так можно логгировать искусственную задачу, в реальном проекте это скорей всего будет плохо. Принцип может быть такой. Данные логов кладутся в очередь в том же потоке, а потом (через время или по достижении порогового размера) другой поток их забирает и пишет в лог. при этом, до некоторой величины граничного потока данных, оно тормозить не будет - пока старая порция будет успевать залоггироваться. Когда поток данных превысит эту величину, то все начнет тормозить - но это уже будет подход к границе производительности. насчет волатильных переменных, скоростей записи, чтения, публикации в др потоки - смотрите на ютуб ранние видео с канала JUGRuVideo, а так же поиском пробивайте имена людей, которые эти доклады делают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2015, 14:21 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
забавно. следующий код у меня отрабатывает примерно за 13 миллисекунд. но если заменить Код: plaintext Код: plaintext Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 01:30 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Dymytry1) просто вставить system.out.println() в цикл. замедляет очень сильно. System.out.println() может выводить в GUI, текстовую консоль, в файл или вообще вникуда. Производительность каждого варианта разная. Dymytry2) создать надзирающий daemon поток который печатает эту переменную, она должна быть volatile как по учебнику, замедляет прилично. При чем тут учебник? volatile решает определенную задачу, но для вашей существуют и другие решения, просто вы о них ещё не знаете. Начните хотя бы с ExecutorService Dymytry3) то же, но переменная без volatile. Ухудшение раз в 10 меньше чем в п.2. Оно почти не связано с потоком, а связано что переменная теперь не локальная. Понятно что ничего не понятно. Dymytry1) Какой оптимальный алгоритм для реализации этой задачи? На сколько я знаю, очереди с буферизированой записью в файл. Логируемое сообщение создаётся в рабочем потоке, никаких volatile для этого не нужно. Сообщение складывается в очередь. Фоновый поток логгера выгребает сообщения и пачкой пишет их в файл. DymytryЛучше все-таки логгировать из основного потока, или из наблюдающего потока? Почему именно "наблюдающего"? Других вариантов нет? DymytryПредполагаю, библиотеки логгирования решают эту задачу, или есть смысл делать как я? Смысла делать как вы нет. Даже самый древний log4j спокойно пишет сотни мегабайт логов в течении максимум пары секунд (в зависимости от устройства IO) Dymytry2) Оказалось, что запись в статическую переменную класса относительно записи в локальную переменную замедляет данный код раз в тыщу. Где бы почитать про Джаву на таком уровне? Ключевые слова для Google JIT, microbenchmarking, JMH, client JVM, server JVM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 09:27 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
DymytryРешил на досуге изучить вопрос влияния логгирования на производительность. Имею простой пустой цикл.. for (i = 0; i<Integer.MAX_VALUE; i++) { } ... и хочу максимально подробно логгировать переменную i, с минимальным импактом на производительность. Лучше на досуге поизучайте русский язык. Ваше изучение импакта не имеет смысла (нот хавает нифига тхе сенсе), поскольку пример не имеет отношения к реальным задачам. Если они у вас есть, то изучайте на них. Но в общем можно сказать, что и в крупных программах это обычно не проблема, однако есть средства предотвращения излишней нагрузки от логирования, их и надо изучить. А именно: 1) Разделить сообщения на уровни. В настройках логирования (лучше в отдельном файле, а не в и исходном коде программы) для обычной эксплуатации указать более высокий уровень (меньше сообщений), а при обнаружении ошибок сменить его на менее высокий. в популярной библиотеке log4j надо использовать как минимум 2 уровня - ERROR и DEBUG. В других посмотреть, какие там есть уровни. 2) Задать, чтобы команды логирования срабатывали только при достаточном уровне. Например, в log4j (или LogBack) это будет выглядеть как: Код: java 1. 2. 3. Эта предосторжность может иметь смысл, если для создания сообщения требуется существенная работа. 3) Вместо log4j (самая популярная библиотека) по возможности использовать LogBack (автор log4j и LogBack утверждает, что LogBack быстрее. Я не проверял). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 13:42 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Partisan Mпоскольку пример не имеет отношения к реальным задачам. Если они у вас есть, то изучайте на них +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 13:56 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
DymytryВсем хороших выходных! ... и хочу максимально подробно логгировать переменную i, с минимальным импактом на производительность. 1) просто вставить system.out.println() в цикл. замедляет очень сильно. 2) создать надзирающий daemon поток который печатает эту переменную, она должна быть volatile как по учебнику, замедляет прилично. 3) то же, но переменная без volatile. Ухудшение раз в 10 меньше чем в п.2. Оно почти не связано с потоком, а связано что переменная теперь не локальная. Что я узнать-то хотел. 1) Какой оптимальный алгоритм для реализации этой задачи? Лучше все-таки логгировать из основного потока, или из наблюдающего потока? Предполагаю, библиотеки логгирования решают эту задачу, или есть смысл делать как я? 2) Оказалось, что запись в статическую переменную класса относительно записи в локальную переменную замедляет данный код раз в тыщу. Где бы почитать про Джаву на таком уровне? Оптимизацию логгирования я-бы начал со следующего. 1) Выбор библиотеки логгирования. Что есть? Тут сравнение по перформансу. Log4j, LogBack, Log4j2 https://logging.apache.org/log4j/2.x/performance.html Обрати внимание на "Asynchronous Logging Performance Improvements". Можно также посмотреть какие стоят Appenders. Файловые - достаточно быстры. Но JDBCAppender, SNMPAppender, и пищущие в сислог операционки будут скорее всего буферизироваться а по заполнении буфера тормозить и блокировать нормальный flow алгоритма. 2) Пересмотреть смысл самой задачи. Если ты борешся с проблемой то ее надо "вычленить". Незачем логгировать простыню трафика типа "entry-exit" в каждый codeblock, callback, или сеттер. Что потом делать с такой аналиткой? Не хватит никаких терабайтов чтобы это хранить. Имеет смысл сделать логгирование избирательным. Логгировать СОБЫТИЕ. Например Код: java 1. 3) Убрать строковые операции и лишнее форматирование. В старых библиотеках. Мы делали конкатенацию Код: java 1. И чтобы отсекать конкатенацию для level > fine от более строгих нужно было оборачивать вызов логгирования проверкой условия. В новых библиотеках есть гарантия того что строковая операция и форматирование не будет работать для "отсекаемых" уровней если мы используем специальный синтаксис с multiple arguments и bracers. Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 15:20 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#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. log4.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. Сотня итераций, вывод на экран (FATAL), в файл и nullAppender (TRACE): Код: plaintext 1. 2. Всё тоже самое, кроме уровня (везде FATAL): Код: plaintext 1. 2. P.S. AsyncLogger настраивается только через xml-конфигурацию. Создаётся (перезаписывается) файл Test.log в текущем каталоге. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 18:35 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Лучше так (без предупреждений об устаревшем API): Код: 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. Ну и замеры времени более "честные" - исключены (фиксированные) затраты времени на создание конфигурации и получение логгеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 19:19 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 19:24 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
rfq, О да, всё придумано до нас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 19:30 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Консоль штука медленная, поэтому запускать лучше так (windows): Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 19:35 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Dymytryс минимальным импактомс чем? о_О ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2015, 22:57 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Более содержательный пример Код: 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. Код: plaintext 1. 2. 3. 4. 5. Если я нигде не накосячил (судя по файловому логу - не накосячил), то, в нулевом приближении, AsycnLogger - вполне эффективен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2015, 17:47 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Всем большое спасибо! Пойду изучать исходники библиотек логгирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2015, 21:56 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
IMHO логгирование показывает весь блеск и нищету кофе-машины. С одной стороны JIT. Казалось бы сделай макросы условную компиляции управляемые из Runtime. И при их изменении инвалидируй скомпилированный код использовавший их и компилируй заново. Ан нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 14:20 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевIMHO логгирование показывает весь блеск и нищету кофе-машины. С одной стороны JIT. Казалось бы сделай макросы условную компиляции управляемые из Runtime. И при их изменении инвалидируй скомпилированный код использовавший их и компилируй заново. Ан нет. Тут кофеварка непричём. Подобный антипаттерн еще легче воспроизводить в языках и системах с двухэтапной компилляцией. А как вариант можно сделать как в ojdbc. Собрать два варианта библиотек. ojdbc_g где включено JUL и ojdbc где вызовы логгеров отсутствуют. В конце-концов манипулирование логами уровня трейс это достаточно специфичная задача и ее можно вынести в цикл конфигурирования приложения. Управляемая компилляция из Runtime это мега-круто но ненужно. Это ... как ипошить по птичкам из САУ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 14:51 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
maytonТут кофеварка непричём. Подобный антипаттерн еще легче воспроизводить в языках и системах с двухэтапной компилляцией. Ну рвет твои шаблоны экстремальное логгирование. Но это не значит, что это что-то не реализуемое. В принципе, при наличии многопоточного логгера и независимого вввода-вывода для лога. Можно добиться того, что основной поток будет испытывать минимальные осложнения от включения-выключения логгирования на лету. Основной оверхед будет в генерации параметров для log.debug(...) и т.п. Собственно есть некоторый плюс от этого - меньше возмущений при включении, проще поймать плавающий баг. Но если нужна максимальная производительность, то надо убирать генерацию параметров. А это без динамического компилирования - только компиляцией для всех уровней. Каждого класса. И соответствующего class loader. Самое смешное, что в кофемашине, обычно, есть динамическая компиляция. Но программиста до нее не допускают. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 15:01 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
DymytryПойду изучать исходники библиотек логгирования. Значит, слова на объяснения потрачены зря, потому что у афтара желание заниматься фигнёй не пропало. Надо изучать руководства по библиотекам логирования, из них можно много чего узнать для пользования. Нет большого смысла в изучении исходников, т.к. можно смело предположить, что авторы популярных библиотек умеют программировать не хуже, чем афтар ненужного теста для их изобличения, раз логирование для него непривычно. Сергей АрсеньевIMHO логгирование показывает весь блеск и нищету кофе-машины. Мне оно показывает только результат логирования. Блеск и нищета если и есть, то не интересуют. Да, забыл. При выводе по формату на скорость может влиять выбор форматов. Например, в log4j для даты (%d) автор рекомендует один из форматов - ABSOLUTE, DATE, ISO8601. Можно задать любой, представимый с помощью SimpleDateFormat, но другие по мнению автора медленнее. Он очевидно измерял, а я нет и эту рекомендацию соблюдаю не всегда, больше обращаю внимание на удобство. Также он предупреждает о возможной медлительности элементов формата C, F, l, L, M. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 15:47 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевОсновной оверхед будет в генерации параметров для log.debug(...) и т.п.Можно озвучить экзотическую конфигурацию, где ввод-вывод перестал быть узким местом?Самое смешное, что в кофемашине, обычно, есть динамическая компиляция. Но программиста до нее не допускают. :)А вы уже научились использовать серверную JVM? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 17:36 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
К вопросу об охрененных затратах на обработку параметров: Код: plaintext 1. 2. 3. 4. 5. 6. 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. 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 17:59 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
В предыдущем примере уровень логирования был "trace", ставим "off" ничего более не меняя: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 18:03 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovМожно озвучить экзотическую конфигурацию, где ввод-вывод перестал быть узким местом? Если вывод в журнал идет на отдельный канал ввода-вывода с независимым массивом дисков и основной поток занят работой, а не только сбросом информации в журнал. То могут быть ситуации, когда ввод-вывод журнала не будет узким местом. Но конечно не панацея. Basil A. SidorovСамое смешное, что в кофемашине, обычно, есть динамическая компиляция. Но программиста до нее не допускают. :)А вы уже научились использовать серверную JVM? Нет. Я конечно представляю себе как встроить препроцессор который будет высматривать в коде макросы условной компиляции перед передачей их javac и как устроить инвалидацию загруженных классов в класслоадере и подсовывание прошедших компиляцию через препроцессор. Но чисто теоретически. На практике до такой фигни руки не доходили. И вряд ли дойдут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 10:09 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#18+
Atum1просто когда if ов много - это реально они реально торомозятВы, блин, контекст не теряйте - чтобы условный оператор тормозил на фоне тормозов ввода-вывода ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 18:30 |
|
||
|
Нетормозящее логирование в Джаве.
|
|||
|---|---|---|---|
|
#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?all=1&fid=59&tid=2124392]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
140ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 441ms |

| 0 / 0 |
