Ми використовуємо log4j за саморобною обгорткою. Зараз ми плануємо використовувати набагато більше можливостей.
Чи слід оновити до зворотного зв'язку?
(Я маю на увазі рамки не фасад, як SLF4J)
Ми використовуємо log4j за саморобною обгорткою. Зараз ми плануємо використовувати набагато більше можливостей.
Чи слід оновити до зворотного зв'язку?
(Я маю на увазі рамки не фасад, як SLF4J)
Відповіді:
Зворотний зв'язок спочатку реалізує API SLF4J. Це означає, що якщо ви використовуєте режим зворотного зв'язку, ви фактично використовуєте API SLF4J. Теоретично ви могли використовувати внутрішній інтерфейс API зворотного зв'язку безпосередньо для ведення журналів, але це сильно не рекомендується. Вся документація щодо зворотного зв'язку та приклади реєстраторів записуються в рамках API SLF4J.
Таким чином, використовуючи логічний зворот, ви фактично використовуєте SLF4J, і якщо з якоїсь причини ви захочете перейти назад до log4j, ви можете це зробити протягом декількох хвилин, просто скинувши slf4j-log4j12.jar на шлях вашого класу.
Під час переходу з logback до log4j, окремі частини, що містяться у файлі конфігурації logback.xml , все-таки потребують міграції до його еквівалента log4j, тобто log4j.properties . Під час міграції в іншому напрямку конфігурацію log4j, тобто log4j.properties , необхідно перетворити на її еквівалент зворотного зв'язку. Для цього є он-лайн інструмент . Обсяг роботи, що бере участь у переміщенні файлів конфігурації, значно менший, ніж робота, необхідна для міграції викликів реєстратора, розповсюджених у всьому вихідному коді програмного забезпечення та його залежностях.
Ви повинні? Так .
Чому? Log4J , по суті, був вимкнений Logback .
Це терміново? Можливо, не.
Це безболісно? Можливо, але це може залежати від ваших заяв на реєстрацію.
Зауважте, що якщо ви дійсно хочете максимально використати переваги LogBack (або SLF4J), то вам дійсно потрібно писати належні заяви реєстрації . Це дасть такі переваги, як швидший код через ледачу оцінку та менше рядків коду, оскільки ви можете уникнути охоронців.
Нарешті, я настійно рекомендую SLF4J. (Навіщо відтворювати колесо з власним фасадом?)
У світі ведення журналів є Фасади (як Apache Commons Logging, slf4j або навіть API Log4j 2.0) та реалізації (Log4j 1 + 2, java.util.logging, TinyLog, Logback).
В основному вам слід замінити саморобну обгортку на slf4j АКО, і тільки якщо ви чомусь із цим не задоволені. Хоча Apache Commons Logging насправді не забезпечує сучасний API, slf4j та новий фасад Log4j 2 забезпечують це. Зважаючи на те, що досить багато додатків використовують slf4j як обгортку, це може мати сенс використовувати.
slf4j дає ряд приємних цукрових API, як цей приклад із slf4j docs:
logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);
Це змінна підміна. Це також підтримується Log4j 2.
Однак вам потрібно знати, що slf4j розроблений QOS, який також підтримує зворотний зв'язок. Log4j 2.0 випікається в програмному фонді Apache. За останні три роки там знову зросла яскрава та активна громада. Якщо ви цінуєте Open Source так, як це робиться програмним фондом Apache, з усіма його гарантіями, ви можете переглянути, використовуючи slf4j на користь прямого використання Log4j 2.
Будь ласка, запиши:
У минулому log4j 1 активно не підтримувався, поки Logback був. Але сьогодні справи різні. Log4j 2 активно підтримується і випускається майже регулярно. Він також включає безліч сучасних функцій і -imho- робить кілька речей кращими, ніж Logback. Іноді це лише питання смаку, і ви повинні зробити власні висновки.
Я написав короткий огляд нових особливостей Log4j 2.0: http://www.grobmeier.de/the-new-log4j-2-0-05122012.html
Читаючи, ви побачите, що Log4j 2 був натхненний Logback, але й іншими рамками ведення журналу. Але база коду інша; він майже нічого не поділяє з Log4j 1 та нулем із Logback. Це призводить до деяких поліпшень, як, наприклад, Log4j 2 працює з bytestreams замість Strings під кришкою. Також він не втрачає події під час перенастроювання.
Log4j 2 може входити з більшою швидкістю, ніж інші рамки, які я знаю: http://www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html
І все ж спільнота користувачів здається значно більшою, ніж Logbacks: http://www.grobmeier.de/apache-log4j-is-the-leading-logging-framework-06082013.html
З урахуванням найкращої ідеї ви вибираєте рамки ведення журналу, які найкраще підходять до того, що ви хочете досягти. Я б не перемикав повний фреймворк, якби я відключив вхід у виробниче середовище і просто виконав базовий журнал у своєму додатку. Однак якщо ви більше заробляєте з веденням журналу, просто подивіться на функції, які надаються рамками та їх розробниками. Хоча ви отримуєте комерційну підтримку для Logback через QOS (я чув), в даний час немає комерційної підтримки для Log4j 2. З іншого боку, якщо вам потрібно зробити журнал аудиту та потребуєте високої продуктивності, наданої додатками async, це має багато сенсу перевірити log4j 2.
Зверніть увагу, незважаючи на весь комфорт, який вони забезпечують, фасади завжди мають невелику ефективність. Це, можливо, зовсім не впливає на вас, але якщо ви мало ресурсів, вам може знадобитися зберегти все, що у вас є.
Не знаючи ваших вимог краще, майже неможливо дати рекомендацію. Просто: не перемикайтеся лише тому, що багато людей переключаються. Перемикайтеся лише тому, що бачите цінність цього. І аргументація того, що log4j мертва, вже не враховується. Це живе, і жарко.
ВІДМОВА ВІДПОВІДАЛЬНОСТІ: Зараз я VP, Apache Logging Services, а також беру участь у log4j.
Не точно відповідаючи на ваше запитання, але якщо ви могли відійти від власноруч виготовленої обгортки, то є фасад простого ведення журналу для Java (SLF4J), на який зараз перейшов Hibernate (замість загального журналу).
SLF4J не страждає від жодної з проблем із завантажувачем класів або витоку пам'яті, що спостерігається при Jakarta Commons Logging (JCL).
SLF4J підтримує журнал JDK, log4j та logback. Тож переходити з log4j на логбек слід досить просто, коли настане час.
Редагувати: Вибачення, що я не дав про себе зрозуміти. Я пропонував використовувати SLF4J, щоб ізолювати себе від необхідності зробити важкий вибір між log4j або logback.
Ваше рішення має ґрунтуватися на
Вам слід протистояти бажанням змінити API лише тому, що це "новіше, блискучіше, краще". Я дотримуюсь політики "якщо це не порушено, не б'є".
Якщо у вашій програмі потрібна дуже складна рамка ведення журналу, ви, можливо, захочете розглянути чому.
Зрілий проект або навіть проект глибоко в стадії розробки, ймовірно, втратять більше, ніж виграш від такого оновлення, IMHO. Зворотний зв'язок, безумовно, набагато вдосконалений у масиві точок, але не в міру для повної заміни в робочій системі. Я, безумовно, розглядаю можливість зворотного зв'язку для нової розробки, але існуючий log4j досить хороший і зрілий для всього, що вже вийшов і зустрічався кінцевим користувачем. Це дуже суб'єктивно, ви повинні бачити, що варто себе.