2010-07-01 2 views
11

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

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

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

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

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

ответ

8

В дополнение ко всем вещи BalusC уже упоминалось выше, в коде Java (сервлеты/бобы/все) просто импортировать и инициализировать 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 и все связанные с ним примеры в той же статье

+1

Спасибо за помощь. Кажется, я не мог найти этот соединительный элемент головоломки. Как в стороне, есть ли причина, по которой средство регистрации, встроенное в JDK, не используется чаще? – Wilson

+0

@Wilson - подробнее об этом обсуждении http://stackoverflow.com/questions/31840/java-logging-vs-log4j и http://stackoverflow.com/questions/582428/java-util-logging-logger-and- log4j – JoseK

+0

@JoseK - Есть ли простой способ зарегистрировать активность сервлета в файле без log4j или консоли? Я задал для этого вопрос. Пожалуйста, помогите мне: https://stackoverflow.com/questions/23858552/simple-way-to-log-servlet-in-tomcat –

10

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

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

Создайте файл с именем log4j.properties, поместите его где-нибудь в корень пути к классам, например. /WEB-INF/classes (или если вы используете IDE, корень папки src, он, в конечном счете, приземлится в нужном месте). Вы также можете сохранить его за пределами webapp и добавить свой путь к пути к классу среды выполнения сервера, указав его путь в свойстве shared.loaderTomcat/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.

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

+0

Спасибо за информацию. Основное разъединение, которое я имею в понимании того, как использовать Log4j, - это как его использовать из кода. Как использовать его в сервлете, в бобах, в POJO? Нужно ли создавать экземпляр Log4j, а затем находить и анализировать свойства или файл XML? – Wilson

+0

Просто используйте 'Logger # getLogger()', а затем 'debug()', 'info()' и т. Д. Методы. Вам не нужно каждый раз находить и анализировать. Если он находится в пути к классам, log4j сделает это сам. Это действительно общая проблема среди стартеров, потому что они не понимают «classpath». – BalusC

+1

Повторяя, что сказал BalusC, [SLF4J] (http://www.slf4j.org/) + [Logback] (http://logback.qos.ch/) - это более современный способ ведения журнала. Созданный изобретателем log4j и предназначенный быть преемником log4j. См. [Мой ответ] (http://stackoverflow.com/a/19947417/642706) на [аналогичный вопрос] (http://stackoverflow.com/questions/19933036/simplest-way-to-log-to-tomcat -catalina-out/19947417 # 19947417) для получения дополнительной информации. –

Смежные вопросы