Зустрічав на просторах інтернету наступну цитату:
Логування має бути грамотним. За System.out.println для виведення логів початківцям програмістам вже через тиждень навчання слід відрубувати руки.
- Підкажіть, як в Java правильно оформити логирование в оффлайн додатках, на tomcat і в інших випадках (наскільки я знаю там різні комманди записи в лог).
- Як вибирати пріоритети повідомлень? Чи є якесь та негласна домовленість яким повідомленнями, який пріоритет ставити?
- Чи варто з пріоритетом нижче, що стоїть в настройках, друкувати в лог вобще всі дії, які відбуваються (тобто пароль пройшов перевірку, обраний такий-то пункт меню, створення нового екземпляра такого-то класу пройшло успішно і т.п. - тобто іншими словами всю дрібниця на випадок необхідності пошуку помилки)?
Промисловим стандартом де-факто логгірованія в Java є Log4J. Всі інші системи логгірованія - це від лукавого, включаючи java.util.logging. Apache commons-loggins та ін. новомодні LogBack (до речі, останній все одно сумісний з Log4J)
Практично всі системи підтримують логгірованіе в стилі Log4J (я маю на увазі справжні Java системи, а не Android, який не зовсім Java). Якщо вони не підтримують Log4J - то це швидше за все неправильні системи :)
У нормальному додатку управління логами зазвичай винесено у зовнішній конфігураційний файл log4j.properties. так що зазвичай управління логами: а саме, що виводити і куди виводити зводиться до шаманства з файлом log4j.properties. У не найскладнішій варіанті це може виглядати так:
Що стосується питання по-приводу рівнів логгірованія. Те негласні домовленості такі:
- Рівень INFO - просто інформування про якийсь подію
- Рівень DEBUG - використовується при налагодженні
- Рівень WARN - повідомлення про помилку або нестандартної ситуації, яка потенційно небезпечна
- Рівень ERROR - повідомлення про помилку, після якої робота програми все ще можлива
- Рівень FATAL - повідомлення про помилку, після якої нормальна робота програми неможлива. Зазвичай після цього робота програми припиняється.
2) Часто виникає питання (скоріше навіть не питання, а холівар): наскільки логгірованіе впливає на продуктивність. Я особисто, вирішую це питання для себе так:
Десь оголошую константу (припустимо в класі MyMain):
і далі в місцях, де йде налагоджувальне логгірованіе пишу:
При виході на продакшн DEBUG встановлюємо false і все. Компілятор сам вже прибере з коду логи загорнуті if (DEBUG) - всі задоволені.