Регистрация сервлетов Tomcat

Я новичок в контейнерах Servlet и создал веб-приложение с помощью Tomcat 6.0.26. У меня есть "TODO: log", разбросанный по всему моему коду. Я вижу, что существует:

myServlet.getServletContext(). Журнал()

который, как представляется, записывается в файл с префиксом "localhost" в каталоге Tomcat/logs. Мне не нужны какие-либо расширенные возможности ведения журнала, но мне бы хотелось, чтобы минимальная дата, время, сообщение и трассировка. Кроме того, я создал несколько классов, используемых моими сервлетами, которые также нуждаются в средствах ведения журнала. Нужно ли вводить SevletContext в эти классы, чтобы они могли регистрироваться?

Похоже, что log4j из Apache - популярный пакет протоколирования, но я не уверен, стоит ли его настраивать.

Каким будет рекомендуемый способ регистрации для моих нужд?

Ответ 1

В дополнение ко всему, что упоминалось выше в BalusC, в вашем Java-коде (сервлеты/ beans/все) просто импортируйте и инициализируйте Logger

package my.app;

import org.apache.log4j.Logger;

private static Logger logger = Logger.getLogger("classname");
// use any string you want 

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

if (logger.isDebugEnabled()) {
            logger.debug("Some log at this point");
        }

...

logger.info("Some info message here");

Они появятся в журналах в зависимости от того, устанавливаете ли вы DEBUG или INFO в log4j.propeties

Взгляните на примеры http://www.java2s.com/Code/Java/Language-Basics/Examplelog4jConfigurationFile.htm и все связанные с ним примеры в той же статье

Ответ 2

Вы не хотите связывать весь свой бизнес и код доступа к данным с помощью ServletContext (я, конечно, предполагаю, что ваш бизнес и код DB не тесно связаны внутри класса сервлета, а просто живут на собственном уровне классов, без ссылок javax.servlet). Поэтому я бы не рекомендовал использовать ServletContext#log(). Он также очень редко используется в реальном мире.

Вы правы, что log4j популярен, хотя ему удалось logback. Настройка log4j не должна быть такой неприятной. Я предлагаю начать с файла свойств, который менее трудно понять, чем XML файл. Вы всегда можете выполнить обновление до XML файла, как только вы поймете, что происходит в конфигурации log4j.

Создайте файл с именем log4j.properties, поместите его где-нибудь в корень пути к классам, например. /WEB-INF/classes (или если вы используете IDE, корень папки src, он, в конечном счете, приземлится в нужном месте). Вы также можете сохранить его за пределами webapp и добавить свой путь к пути к среде выполнения сервера, указав его путь в свойстве shared.loader Tomcat/conf/catalina.properties. Наконец, заполните его следующим образом:

# Set root logger level and appender name.
log4j.rootLogger = TRACE, console

# Specify appenders.
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender

# Configure console appender.
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d{ABSOLUTE} [%t] %-5p %m%n

# Configure file appender.
log4j.appender.file.File = /webapp/logs/web.log
log4j.appender.file.DatePattern = '.'yyyy-MM-dd
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %d{ABSOLUTE} [%t] %-5p %m%n

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

# Set root logger level and appender name.
log4j.rootLogger = INFO, console

В этом примере также по умолчанию используется консольный appender. Он будет записываться на стандартный вывод, поскольку он настроен Tomcat, который по умолчанию попадает в файл /logs/localhost.yyyy-MM-dd.log.

Однако вы можете изменить его, чтобы использовать файл appender так:

# Set root logger level and appender name.
log4j.rootLogger = INFO, file

Настройки ConversionPattern можно найти подробно в PatternLayout javadoc.

Надеюсь, это поможет вам начать работу.