2008-11-17 3 views

ответ

8

Apache Commons Logging не предназначена для применения общих лесозаготовок. Он предназначен для использования библиотеками или API, которые не хотят принудительно внедрять реализацию протокола для пользователя API.

Есть также проблемы с загрузкой классов с помощью Commons Logging.

Выберите один из [много] журналов api, наиболее широко используемым, вероятно, являющимся log4j или Java Logging API.

Если вы хотите независимость от реализации, вы можете рассмотреть SLF4J, автор оригинала log4j.

Выбрав реализацию, затем используйте уровни/степень регистрации в рамках этой реализации последовательно, так что поиск/фильтрация журналов проще.

+0

Обычно они имеют расширенные функции, такие как автоматическое ведение журнала источника и фильтрация по местоположению местоположения уровня ИЛИ. Это значительно облегчает отладку. Используйте один из них! (также проверьте бензопилу) – 2008-11-17 17:19:25

0

Там действительно нет лучшей практики для входа ошибку. В основном это просто необходимо следовать последовательной схеме (в рамках программного обеспечения/компании/и т. Д.), Которая обеспечивает достаточную информацию для отслеживания проблемы. Для примера, вы можете отслеживать время, метод, параметры вызова метода и т.д.

До тех пор пока вы не просто напечатать «Ошибка в»

2

Самый простой способ ошибки в лог согласованный формат - использовать структуру ведения журнала, такую ​​как Log4j (при условии, что вы используете Java). Полезно включить раздел регистрации в ваши стандарты кода, чтобы убедиться, что все разработчики знают, что нужно регистрировать. Самое приятное в большинстве систем ведения журнала - они имеют разные уровни ведения журнала, поэтому вы можете контролировать, насколько велик журнал, между разработкой, тестированием и производством.

2

Наилучшей практики является использование Рамочной java.util.logging

Затем вы можете войти сообщения в любом из этих форматов

log.warning(".."); 
log.fine(".."); 
log.finer(".."); 
log.finest(".."); 

Или

log.log(Level.WARNING, "blah blah blah", e); 

Затем вы можете использовать logging.properties (пример ниже), чтобы переключаться между уровнями ведения журнала и делать всевозможные умные вещи, такие как запись в файлы, с вращением и т. д.

handlers = java.util.logging.ConsoleHandler 

.level = WARNING 

java.util.logging.ConsoleHandler.level = ALL 

com.example.blah = FINE 
com.example.testcomponents = FINEST 

На мой взгляд, следует избегать таких структур, как log4j и других, на Java есть все, что вам нужно.

EDIT

Это может применяться в качестве общей практики для любого языка программирования. Возможность управлять всеми уровнями ведения журнала из одного файла свойств часто очень важна в корпоративных приложениях.

2

Некоторые предложили передовой практики,

  • Используйте рамки протоколирования. Это позволит вам:

    • Легко изменить назначения ваших сообщений журнала
    • журнала
    • Фильтр сообщений на основе серьезности
    • Поддержка многоязычных сообщений журнала
  • Если вы используете Java, то slf4j теперь предпочитают Jakarta commons logging в качестве лесозаготовительного фасада.

  • Как указано, slf4j - это фасад, и вы должны затем выбрать базовую реализацию. Либо log4j, java.util.logging, либо «simple».

  • Следуйте советы своей фреймворки для обеспечения expensive logging operations не напрасно проводит

0

API-интерфейс API общего доступа Apache, упомянутый выше, является отличным ресурсом. Возвращаясь к java, есть также стандартный поток вывода ошибок (System.err).

непосредственно из API Java:

Этот поток уже открыт и готов принимать выходные данные.

Обычно этот поток соответствует выводам дисплея или другому выходу адресата, указанного хозяином окружающей среды или пользователя. По соглашению, этот выходной поток используется для отображения сообщения об ошибках и другую информацию о , которые должны прийти к немедленному внимания пользователя, даже если основной выходной поток, значение переменной вне, был перенаправлен к файл или другой пункт назначения, который обычно не контролируется постоянно.

22

Запись на консоль является ужасающей и, откровенно говоря, знаком неопытного разработчика. Единственная причина такого рода: 1) он или она не знает о других подходах и/или 2) разработчик не подумал, что произойдет, когда его/ее код будет развернут на производственный сайт, и как приложение будет поддерживаться в этот момент. Работа с приложением, которое регистрирует 1 ГБ/сутки или больше полностью ненужного журнала отладки, сходит с ума.

Общепринятые Лучше всего использовать структуру Logging, которая имеет понятие:

  1. Различные объекты журнал - Различные классы/модули/и т.д. может войти в различные лесоруб, так что вы можете применять различный журнал конфигурации для разных частей приложения.
  2. Различные уровни журналов - поэтому вы можете настроить конфигурацию протоколирования только для регистрации ошибок в производстве, для регистрации всех видов информации об отладке и трассировке в среде разработки и т. Д.
  3. Различные логические выходы - структура должна позволять вам configure , где выход журнала отправляется без каких-либо изменений в кодовой базе. Некоторые примеры различных мест, где вы можете отправить вывод журнала в файлы, файлы, которые пролонгировать по дате/размеру, баз данных, электронной почты, удаленного взаимодействия раковин и т.д.
  4. Структура журнала никогда не должны никогданикогда броска любые Исключения или ошибки из регистрационного кода. Ваше приложение не должно не загружаться или не запускаться, поскольку структура журнала не может создать файл журнала или получить блокировку файла (если это не является критическим требованием, возможно, по юридическим причинам, для вашего приложения).

В конечном итоге, структура журнала, которую вы будете использовать, будет зависеть от вашей платформы. Некоторые распространенные варианты:

0

Помимо технических соображений из других ответов рекомендуются журнал содержательного сообщения и, возможно, некоторые шаги, чтобы избежать ошибка в будущем. В зависимости от ошибок, конечно.

Вы можете получить больше от ошибки ввода-вывода, когда в сообщении указано что-то вроде «Не удалось прочитать из файла X, у вас нет соответствующего разрешения».

См. Еще примеры на SO или search the web.