Вход в Java и вообще: передовой опыт?
Ниже приводится набор рекомендаций, которым logger я следую во всех своих проектах, чтобы logger обеспечить хорошую производительность. Я .java пришел к формированию этого oraclejdk набора руководящих принципов .java на основе материалов из различных openjdk источников в Интернете.
На logging сегодняшний день я считаю, что jdk Log4j 2 - лучший вариант javax для входа в систему на Java.
Тесты core-java доступны here. Чтобы добиться javax максимальной производительности, я logging придерживаюсь следующей практики:
- В настоящее время я избегаю использования SLF4J по следующим причинам:
- У него есть некоторые проблемы параллелизма с маркерами, которые я хочу использовать для управления журналированием операторов SQL (Markers not as powerful as slf4j - см. первый комментарий Ральфа Гоерса)
- Он не поддерживает Java 8 Lambda, который, опять же, я хочу использовать для повышения производительности (Support the lambda expression in the Logger)
- Регулярно ведите журнал с помощью асинхронного средства ведения журнала для повышения производительности.
- Записывать сообщения об ошибках в отдельный файл с помощью синхронного регистратора, потому что мы хотим видеть сообщения об ошибках, как только они возникают.
- Не используйте информацию о местоположении, такую как имя файла, имя класса, имя метода, номер строки, в обычном журнале, потому что для получения этой информации платформа делает снимок стека и просматривает его. Это влияет на производительность. Следовательно, используйте информацию о местоположении только в журнале ошибок, а не в обычном журнале.
- Для отслеживания отдельных запросов, обрабатываемых отдельными потоками, рассмотрите возможность использования контекста потока и случайного UUID, как описано here
- Поскольку мы регистрируем ошибки в отдельном файле, очень важно, чтобы мы регистрировали контекстную информацию также в журнале ошибок. Например, если приложение обнаружило ошибку при обработке файла, распечатайте имя файла и обрабатываемую запись файла в файле журнала ошибок вместе с трассировкой стека.
- Файл журнала должен быть доступен для поиска и прост для понимания. Например, если приложение обрабатывает записи клиентов в нескольких файлах, каждое сообщение журнала должно выглядеть следующим образом:
12:01:00,127 INFO FILE_NAME=file1.txt - Processing starts 12:01:00,127 DEBUG FILE_NAME=file1.txt, CUSTOMER_ID=756 12:01:00,129 INFO FILE_NAME=file1.txt - Processing ends
- Регистрируйте все операторы SQL с помощью маркера SQL, как показано ниже, и используйте фильтр, чтобы включить или отключить его:
private static final Marker sqlMarker = MarkerManager.getMarker("SQL"); private void method1() { logger.debug(sqlMarker, "SELECT * FROM EMPLOYEE"); }
- Регистрируйте все параметры с помощью лямбда-выражений Java 8. Это избавит приложение от форматирования сообщения, когда данный уровень журнала отключен:
int i=5, j=10; logger.info("Sample output {}, {}", ()->i, ()->j);
-
Не jre используйте конкатенацию logger строк. Используйте параметризованное log4j сообщение, как показано выше
-
Используйте log динамическую перезагрузку logs конфигурации ведения журнала, чтобы .java приложение автоматически oraclejdk перезагружало изменения в java-libraries конфигурации ведения журнала log без необходимости перезапуска openjdk приложения
-
Не используйте java
printStackTrace()
илиSystem.out.println()
-
Приложение должно выключить log4j регистратор перед выходом:
LogManager.shutdown();
- Наконец, для всеобщего сведения, я использую следующую конфигурацию:
${env:LOG_ROOT}/SAMPLE ${env:LOG_ROOT}/SAMPLE/sample 10 MB %d{HH:mm:ss,SSS} %m%n %d{HH:mm:ss,SSS} %p %c{1.}[%L] [%t] %m%n
- Необходимые зависимости Maven находятся здесь:
org.apache.logging.log4j log4j-api 2.8.1 org.apache.logging.log4j log4j-core 2.8.1 com.lmax disruptor 3.3.6 org.apache.logging.log4j log4j-1.2-api 2.8.1
java
logging
log4j
Вход в Java и вообще: передовой опыт?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.