SlideShare a Scribd company logo
What do you know
 about Logging?
Кто я 
  Denis Udod
  Java developer

 

 
Кто я 
  Denis Udod
  Java developer

 



    С Java c 1998г.
О чем я хочу рассказать?
   От
    System.out.println(“log”);

   До
    log.error(“Error {}”, code);

   Что плохо и как хорошо.
Зачем нам logging?
   Каждый видит свой logging
Зачем нам logging?
   Каждый видит свой logging

   Программист – а как работает мой код
Зачем нам logging?
   Каждый видит свой logging

   Администратор – как решить проблему?
Зачем нам logging?
   Каждый видит свой logging
Через тернии к ...
   История о том как принять “неудачный”
    стандарт и породить кошмар.
Начало
   Давным давно...
Начало
   Напечатать строку на консоль/файл.
Начало
   Напечатать строку на консоль/файл.
   1999 - Log4J

     Версия: 1.2.17 ( May 2012 )
             1.2.x начался в 2004
     До версии 1.2.8 совместим с Java 1.1
   1999 - Log4J
       Что нового ?

       Loggers (aka Category)

       Appenders

       Layout
   1999 - Log4J
       Что нового ?
         Loggers (aka Category)
         Appenders

         Layout




     Иерархию category/logger
     1 logger – n appenders

     конфигурируемый layout

     Уровни

        TRACE, DEBUG, INFO, WARN, ERROR ,FATAL, OFF
   1999 - Log4J

   Итак, что мы получили?
     удачная архитектура
     понятная система конфигурирования

     оптимизироан по скорости

     понятные и достаточные уровни

      логирования
    …

     хорошее сообщество
   1999 - Log4J

   Хороший кандидат на включение в
    стандартный API Java.
   1999 - Log4J

   Java Logging API / JUL /


    Мы не ищем
    легких путей.
   Java Logging API / JUL/
       А в чем разница?

       Handler

       Formatter
   Java Logging API / JUL/

       Очень похоже на Log4J

     Loggers (aka Category)
     Appenders

     Layout
   Java Logging API / JUL/
     Handler
            5 ШТУК
     Formatter

            бледнеько

       Уровни ?
   Java Logging API / JUL/
     Handler
     Formatter



       Уровни
        SEVERE
        WARNING
        INFO
        CONFIG
        FINE
        FINER
        FINEST
   Java Logging API / JUL/
       Уровни

        SEVERE
        WARNING
        INFO
        CONFIG

        FINE
        FINER
        FINEST
 1999 - Log4J
 Java Logging API / JUL /

 А что нам использовать ?
 1999 - Log4J
 Java Logging API / JUL /

   2002 – Jakarta Commons Logging

Мы думали думали и …
на конец придумали.
 1999 - Log4J
 Java Logging API / JUL /

   2002 – Jakarta Commons Logging

    ClassLoader Hell
Итак, что мы имеем
   Стабильный и функционально log4j
    застрявший в java 1.3
 Унылый java.util.logging
 Проблемный commons-logging
Итак, что мы имеем
   Стабильный и функционально log4j
    застрявший в java 1.3
 Унылый java.util.logging
 Проблемный commons-logging
SLF4J
 2004г.
 Simple Logging Facade For Java



       Wrapper for Wreppers
SLF4J
   Чем лучше?
       «Переходники»

    
        Log4j ->   slf4j   / log4j-over-slf4j.jar
    
        JUL   ->   slf4j   / jul-to-slf4j.jar
    
        JCL   ->   slf4j   / jcl-over-slf4j.jar
SLF4J
   Чем лучше?
       А куда пишем?

       slf4j   -> Log4j    / slf4j-log4j.jar
       slf4j   -> JUL      / slf4j-jdk14.jar
       slf4j / logback     / locback.jar
Где мы сейчас
 log4j
 JUL

 commons-logging

 SLF4J

 Logback
Как «скрутить» logger
   Выбираем “правильный” logger
     Log4j
     Jul

     Logback

   Удаляем все остальные API
       Заменяем их соответствующими
        переходниками
Что такое хорошо,
 что такое плохо
   Идиальный logging
   System.out / System.err
   System.out / System.err
   System.out / System.err
   «Ковровое бомбометание»
   «Ковровое бомбометание»
   «Ковровое бомбометание»
   «Тупая работа»
   «Тупая работа»
   Имя?
   Имя?
   Имя?
   Имя?
   Вывод в консоль ?

       Чем меньше тем лучше
   Context ?
       slf4j –Mappet Diagnostic Context
Что и где ?

http://logging.apache.org/log4j/1.2/
http://www.slf4j.org/manual.html
http://logback.qos.ch/manual/
http://www.parleys.com/#st=5&id=1701&sl=27
Вопросы ?

More Related Content

Viewers also liked

Arduino práctico servos
Arduino práctico   servosArduino práctico   servos
Arduino práctico servos
Jose Antonio Vacas
 
Imagens Vernissage Residence Club
Imagens Vernissage Residence ClubImagens Vernissage Residence Club
Imagens Vernissage Residence Club
Alexandre Quadros
 
LatJUG. JPA2 Done Right
LatJUG. JPA2 Done RightLatJUG. JPA2 Done Right
LatJUG. JPA2 Done Right
denis Udod
 
LatJUG. Complete Idiots Guide2Android
LatJUG. Complete Idiots Guide2AndroidLatJUG. Complete Idiots Guide2Android
LatJUG. Complete Idiots Guide2Android
denis Udod
 
Java. Exceptions - how to cook, how to eat.
Java. Exceptions - how to cook, how to eat.Java. Exceptions - how to cook, how to eat.
Java. Exceptions - how to cook, how to eat.
denis Udod
 
LatJUG. Mar-2011
LatJUG. Mar-2011LatJUG. Mar-2011
LatJUG. Mar-2011
denis Udod
 
Premium Club Brochure 2009 2010
Premium Club Brochure 2009 2010Premium Club Brochure 2009 2010
Premium Club Brochure 2009 2010
Michelek8
 
The Premium Club AT&T SportsDeck
The Premium Club AT&T SportsDeckThe Premium Club AT&T SportsDeck
The Premium Club AT&T SportsDeck
Michelek8
 
Agile latvia evening_unit_testing_in_practice
Agile latvia evening_unit_testing_in_practiceAgile latvia evening_unit_testing_in_practice
Agile latvia evening_unit_testing_in_practice
denis Udod
 
Evidence Qualitylife
Evidence QualitylifeEvidence Qualitylife
Evidence Qualitylife
Alexandre Quadros
 
LatJUG. Java Bytecode Fundamentals
LatJUG. Java Bytecode FundamentalsLatJUG. Java Bytecode Fundamentals
LatJUG. Java Bytecode Fundamentals
denis Udod
 
Elegance Freguesia
Elegance FreguesiaElegance Freguesia
Elegance Freguesia
Alexandre Quadros
 
LatJUG.Jun-2011
LatJUG.Jun-2011LatJUG.Jun-2011
LatJUG.Jun-2011
denis Udod
 
LatJUG. Spring Roo
LatJUG. Spring RooLatJUG. Spring Roo
LatJUG. Spring Roo
denis Udod
 
The Premium Club 2010
The Premium Club 2010The Premium Club 2010
The Premium Club 2010
Michelek8
 
Traveling salesman problem__theory_and_applications
Traveling salesman problem__theory_and_applicationsTraveling salesman problem__theory_and_applications
Traveling salesman problem__theory_and_applications
Sachin Kheveria
 
LatJUG. Google App Engine
LatJUG. Google App EngineLatJUG. Google App Engine
LatJUG. Google App Engine
denis Udod
 
LatJUG Feb-2011
LatJUG Feb-2011LatJUG Feb-2011
LatJUG Feb-2011
denis Udod
 
LatJUG. JSF2.0 - The JavaEE6 Standard
LatJUG. JSF2.0 - The JavaEE6 StandardLatJUG. JSF2.0 - The JavaEE6 Standard
LatJUG. JSF2.0 - The JavaEE6 Standard
denis Udod
 

Viewers also liked (19)

Arduino práctico servos
Arduino práctico   servosArduino práctico   servos
Arduino práctico servos
 
Imagens Vernissage Residence Club
Imagens Vernissage Residence ClubImagens Vernissage Residence Club
Imagens Vernissage Residence Club
 
LatJUG. JPA2 Done Right
LatJUG. JPA2 Done RightLatJUG. JPA2 Done Right
LatJUG. JPA2 Done Right
 
LatJUG. Complete Idiots Guide2Android
LatJUG. Complete Idiots Guide2AndroidLatJUG. Complete Idiots Guide2Android
LatJUG. Complete Idiots Guide2Android
 
Java. Exceptions - how to cook, how to eat.
Java. Exceptions - how to cook, how to eat.Java. Exceptions - how to cook, how to eat.
Java. Exceptions - how to cook, how to eat.
 
LatJUG. Mar-2011
LatJUG. Mar-2011LatJUG. Mar-2011
LatJUG. Mar-2011
 
Premium Club Brochure 2009 2010
Premium Club Brochure 2009 2010Premium Club Brochure 2009 2010
Premium Club Brochure 2009 2010
 
The Premium Club AT&T SportsDeck
The Premium Club AT&T SportsDeckThe Premium Club AT&T SportsDeck
The Premium Club AT&T SportsDeck
 
Agile latvia evening_unit_testing_in_practice
Agile latvia evening_unit_testing_in_practiceAgile latvia evening_unit_testing_in_practice
Agile latvia evening_unit_testing_in_practice
 
Evidence Qualitylife
Evidence QualitylifeEvidence Qualitylife
Evidence Qualitylife
 
LatJUG. Java Bytecode Fundamentals
LatJUG. Java Bytecode FundamentalsLatJUG. Java Bytecode Fundamentals
LatJUG. Java Bytecode Fundamentals
 
Elegance Freguesia
Elegance FreguesiaElegance Freguesia
Elegance Freguesia
 
LatJUG.Jun-2011
LatJUG.Jun-2011LatJUG.Jun-2011
LatJUG.Jun-2011
 
LatJUG. Spring Roo
LatJUG. Spring RooLatJUG. Spring Roo
LatJUG. Spring Roo
 
The Premium Club 2010
The Premium Club 2010The Premium Club 2010
The Premium Club 2010
 
Traveling salesman problem__theory_and_applications
Traveling salesman problem__theory_and_applicationsTraveling salesman problem__theory_and_applications
Traveling salesman problem__theory_and_applications
 
LatJUG. Google App Engine
LatJUG. Google App EngineLatJUG. Google App Engine
LatJUG. Google App Engine
 
LatJUG Feb-2011
LatJUG Feb-2011LatJUG Feb-2011
LatJUG Feb-2011
 
LatJUG. JSF2.0 - The JavaEE6 Standard
LatJUG. JSF2.0 - The JavaEE6 StandardLatJUG. JSF2.0 - The JavaEE6 Standard
LatJUG. JSF2.0 - The JavaEE6 Standard
 

Similar to JUG.LV What do you know about Logging?

Как сделать логирование приятным в быстро развивающемся проекте - Иван Савин,...
Как сделать логирование приятным в быстро развивающемся проекте - Иван Савин,...Как сделать логирование приятным в быстро развивающемся проекте - Иван Савин,...
Как сделать логирование приятным в быстро развивающемся проекте - Иван Савин,...
it-people
 
Thumbtack Expertise Days # 5 - Logstash
Thumbtack Expertise Days # 5 - LogstashThumbtack Expertise Days # 5 - Logstash
Thumbtack Expertise Days # 5 - Logstash
Alexey Remnev
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
Alexander Syrotenko
 
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Ontico
 
Полезное покрытие кода
Полезное покрытие кодаПолезное покрытие кода
Полезное покрытие кода
SQALab
 
Deep storm presentation
Deep storm presentationDeep storm presentation
Deep storm presentation
Alexandr Babenko
 
Java Enterprise without Java
Java Enterprise without JavaJava Enterprise without Java
Java Enterprise without JavaOlena Syrota
 
Erlang killer features
Erlang killer featuresErlang killer features
Erlang killer features
Yuri Zhloba
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9
JavaDayUA
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
SQALab
 
Evgeny Rybak Presentation
Evgeny Rybak PresentationEvgeny Rybak Presentation
Evgeny Rybak Presentationsef2009
 
Java in Motion
Java in MotionJava in Motion
Java in Motion
Alexey Fyodorov
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
IT61
 
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The GrinderИлья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
SQALab
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действии
Nikita Lipsky
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кода
Tatyanazaxarova
 
StackLight (aka LMA)
StackLight (aka LMA)StackLight (aka LMA)
StackLight (aka LMA)
OpenStackRussia
 

Similar to JUG.LV What do you know about Logging? (20)

Как сделать логирование приятным в быстро развивающемся проекте - Иван Савин,...
Как сделать логирование приятным в быстро развивающемся проекте - Иван Савин,...Как сделать логирование приятным в быстро развивающемся проекте - Иван Савин,...
Как сделать логирование приятным в быстро развивающемся проекте - Иван Савин,...
 
Thumbtack Expertise Days # 5 - Logstash
Thumbtack Expertise Days # 5 - LogstashThumbtack Expertise Days # 5 - Logstash
Thumbtack Expertise Days # 5 - Logstash
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
 
Полезное покрытие кода
Полезное покрытие кодаПолезное покрытие кода
Полезное покрытие кода
 
Deep storm presentation
Deep storm presentationDeep storm presentation
Deep storm presentation
 
Объект Logger
Объект LoggerОбъект Logger
Объект Logger
 
Java Enterprise without Java
Java Enterprise without JavaJava Enterprise without Java
Java Enterprise without Java
 
Gen server
Gen serverGen server
Gen server
 
Erlang killer features
Erlang killer featuresErlang killer features
Erlang killer features
 
JPHP
JPHPJPHP
JPHP
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
 
Evgeny Rybak Presentation
Evgeny Rybak PresentationEvgeny Rybak Presentation
Evgeny Rybak Presentation
 
Java in Motion
Java in MotionJava in Motion
Java in Motion
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
 
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The GrinderИлья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действии
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кода
 
StackLight (aka LMA)
StackLight (aka LMA)StackLight (aka LMA)
StackLight (aka LMA)
 

JUG.LV What do you know about Logging?

  • 1. What do you know about Logging?
  • 2. Кто я   Denis Udod  Java developer  
  • 3. Кто я   Denis Udod  Java developer   С Java c 1998г.
  • 4. О чем я хочу рассказать?  От System.out.println(“log”);  До log.error(“Error {}”, code);  Что плохо и как хорошо.
  • 5. Зачем нам logging?  Каждый видит свой logging
  • 6. Зачем нам logging?  Каждый видит свой logging  Программист – а как работает мой код
  • 7. Зачем нам logging?  Каждый видит свой logging  Администратор – как решить проблему?
  • 8. Зачем нам logging?  Каждый видит свой logging
  • 9. Через тернии к ...  История о том как принять “неудачный” стандарт и породить кошмар.
  • 10. Начало  Давным давно...
  • 11. Начало  Напечатать строку на консоль/файл.
  • 12. Начало  Напечатать строку на консоль/файл.
  • 13. 1999 - Log4J  Версия: 1.2.17 ( May 2012 )  1.2.x начался в 2004  До версии 1.2.8 совместим с Java 1.1
  • 14. 1999 - Log4J  Что нового ?  Loggers (aka Category)  Appenders  Layout
  • 15. 1999 - Log4J  Что нового ?  Loggers (aka Category)  Appenders  Layout  Иерархию category/logger  1 logger – n appenders  конфигурируемый layout  Уровни TRACE, DEBUG, INFO, WARN, ERROR ,FATAL, OFF
  • 16. 1999 - Log4J  Итак, что мы получили?  удачная архитектура  понятная система конфигурирования  оптимизироан по скорости  понятные и достаточные уровни логирования …  хорошее сообщество
  • 17. 1999 - Log4J  Хороший кандидат на включение в стандартный API Java.
  • 18. 1999 - Log4J  Java Logging API / JUL / Мы не ищем легких путей.
  • 19. Java Logging API / JUL/  А в чем разница?  Handler  Formatter
  • 20. Java Logging API / JUL/  Очень похоже на Log4J  Loggers (aka Category)  Appenders  Layout
  • 21. Java Logging API / JUL/  Handler 5 ШТУК  Formatter бледнеько  Уровни ?
  • 22. Java Logging API / JUL/  Handler  Formatter  Уровни SEVERE WARNING INFO CONFIG FINE FINER FINEST
  • 23. Java Logging API / JUL/  Уровни SEVERE WARNING INFO CONFIG FINE FINER FINEST
  • 24.  1999 - Log4J  Java Logging API / JUL /  А что нам использовать ?
  • 25.  1999 - Log4J  Java Logging API / JUL /  2002 – Jakarta Commons Logging Мы думали думали и … на конец придумали.
  • 26.  1999 - Log4J  Java Logging API / JUL /  2002 – Jakarta Commons Logging ClassLoader Hell
  • 27. Итак, что мы имеем  Стабильный и функционально log4j застрявший в java 1.3  Унылый java.util.logging  Проблемный commons-logging
  • 28. Итак, что мы имеем  Стабильный и функционально log4j застрявший в java 1.3  Унылый java.util.logging  Проблемный commons-logging
  • 29. SLF4J  2004г.  Simple Logging Facade For Java  Wrapper for Wreppers
  • 30. SLF4J  Чем лучше?  «Переходники»  Log4j -> slf4j / log4j-over-slf4j.jar  JUL -> slf4j / jul-to-slf4j.jar  JCL -> slf4j / jcl-over-slf4j.jar
  • 31. SLF4J  Чем лучше?  А куда пишем?  slf4j -> Log4j / slf4j-log4j.jar  slf4j -> JUL / slf4j-jdk14.jar  slf4j / logback / locback.jar
  • 32.
  • 33.
  • 34. Где мы сейчас  log4j  JUL  commons-logging  SLF4J  Logback
  • 35. Как «скрутить» logger  Выбираем “правильный” logger  Log4j  Jul  Logback  Удаляем все остальные API  Заменяем их соответствующими переходниками
  • 36.
  • 37.
  • 38. Что такое хорошо, что такое плохо
  • 39. Идиальный logging
  • 40. System.out / System.err
  • 41. System.out / System.err
  • 42. System.out / System.err
  • 43. «Ковровое бомбометание»
  • 44. «Ковровое бомбометание»
  • 45. «Ковровое бомбометание»
  • 46. «Тупая работа»
  • 47. «Тупая работа»
  • 48. Имя?
  • 49. Имя?
  • 50. Имя?
  • 51. Имя?
  • 52. Вывод в консоль ?  Чем меньше тем лучше
  • 53. Context ?  slf4j –Mappet Diagnostic Context
  • 54. Что и где ? http://logging.apache.org/log4j/1.2/ http://www.slf4j.org/manual.html http://logback.qos.ch/manual/ http://www.parleys.com/#st=5&id=1701&sl=27

Editor's Notes

  1. Т.е. о  чем всегда “надо” помнить? Logging это не только “запись” куда либо log-инфомации, но и анализ той информации, кроторую вы записали в log. Т.е. не “мы ЧТО-ТО записываем в лог” Постарайтесь, в первую очередь, что бы у вас было ЧЕТКОЕ понимаение “ЗАЧЕМ мы записываем в log”. Если вы это делаете потому что “вам сказали”, “так принято”, то лучше НЕ ПИШИТЕ В LOG НИЧЕГО, по крайней мере вы не сделаете “ошибок” и ваш код будет лучше выглядеть, проще читаться.
  2. Попробую расказать об истории развития Java logging’а, в меру возможности. Почему “…” ну, потому что как говорилось в сказке “ мы  шли шли шли, а что вышло, то вышло”. Вобщем история о том как шли, куда шли и как с этим жить.
  3. Давным давно, когда программисты JUG были еще маленькими  Что было нужно для logginga ? Ну, вобщем минимальная “функциональность” для logging’a это ? (варианты)
  4. log4j — используют подсевшие на него изначально и не видящие необходимости перехода. JUL — тихо умирающий стандарт. Все, кто изначально пытался его использовать, переезжают на Logback. commons-logging — обычно задействован в legacy-библиотеках, которые очень боятся причинить неудобства пользователем, переехав на что-нибудь получше. SLF4J — очень популярен в библиотеках. Многие переехали на него, не выдержав ужасов commons-logging Logback — обычно современные high-performance серверы, которых не устраивает log4j.