Что такое ведение журнала и как используется ведение журнала Apache Commons? - PullRequest
3 голосов
/ 03 марта 2011

Какую информацию сервер веб-приложений захочет зарегистрировать и почему?

Из того, что я понимаю

org.apache.commons.logging.Log

- это интерфейс, который абстрагирует функциональность, предоставляемую другими классами Logging, и то же самое относится к интерфейсу LogFactory.

Код, который я пытаюсь понять, имеет -

Log auditLogger = LogFactory.getLog(someString);

Как String someString используется для определения того, какой LogFactory генерировать? Как я могу увидеть реализацию используемых классов Log и LogFactory?

Ответы [ 3 ]

5 голосов
/ 03 марта 2011

Строка - это произвольный identifier, который мы можем использовать для перенаправления или фильтра вывода журнала.Одним из распространенных подходов является использование className, например,

Log auditLogger = LogFactory.getLog(MyCurrentClass.class);

Как вы сказали, commons-logging - это фасад, который по умолчанию равен java.util.logging, если не предоставлена ​​другая библиотека журналирования.Я бы порекомендовал поместить реализацию журналирования, такую ​​как log4j , logback или slf4j в classpath .

Предполагая, что вы положили, например, log4j, вы можете управлять выходом журнала, используя файл конфигурации log4j.xml, например:

<?xml version="1.0" encoding="UTF-8"?>
<log4j:configuration>

    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        ..... 
    </appender>


    <!-- Send debug information from "com.company.MyCurrentClass" to CONSOLE -->
    <logger name="com.company.MyCurrentClass">
        <level value="DEBUG"/>
        <appender-ref ref="CONSOLE"/>
    </logger>

</log4j:configuration>
1 голос
/ 03 марта 2011

Мы используем код, аналогичный Log logger = LogFactory.getLog(MyCurrentClass.class);, в нашем веб-слое (Struts2 Actions или JSF Backing Beans), а также в наших EJB 3 Session Beans.

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

Вы также можете использовать logger.debug("Debug message") дляЗаписывать больше информации, когда структура ведения журнала включена, чтобы принимать их (в Log4J вы бы установили порог на DEBUG или ниже, что может быть сделано во время выполнения).Если сначала необходимо извлечь / собрать отладочное сообщение и т. Д., Что может быть слишком дорого для общего случая, когда оно вам не нужно, вы можете сначала проверить logger.isDebugEnabled().

Как правило, каждый регистратор получаетимя, которое вы предоставляете методу LogFactory.getLog (), в виде строки или класса.Это позволяет вам устанавливать различные настройки для регистратора или группы.

Например, если у вас есть регистратор для my.package.MyClass и вы используете библиотеку с пакетом org.library.*, вы можете настроить каркас ведения журнала для включения сообщений отладки дляmy.package.* но не для org.library.*.Таким образом, вы можете фильтровать сообщения для получения меньшего / лучшего читаемого журнала.

1 голос
/ 03 марта 2011

someString - это просто имя логгера (или псевдоним, если хотите, обычно имя класса). Вам не нужно знать реализацию Log и LogFactory, просто настройте и используйте.

Информация, которую веб-приложение должно регистрировать, - это то, что разработчик этого приложения хочет знать (например, обработка исключений, некоторый поток состояний, другая полезная информация)

...