Регистрация сервлетов 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.
Надеюсь, это поможет вам начать работу.