2010-04-05 4 views
2

Я прочитал несколько вопросов здесь относительно Tomcat и ведение журнала, но я до сих пор действительно не понимаю «больше картины», следовательно, на мой вопрос:Tomcat: recommandations для протоколирования

Как и где моя Webapps должна делать их регистрации?

По умолчанию на моей установке Tomcat 6.0.20 журналы идут в следующем файле/Appender:

./apache-tomcat-6.0.20/logs/catalina.out

Могу ли я предположить, чтобы мои webapps также регистрировались в этом файле/appender?

Пусть говорят мой случай тривиально проста, и у меня только один сервлет:

import ... // What do I import here in order to be able to log? 

public class SOServlet extends HttpServlet { 

    public void doGet(
     final HttpServletRequest request, 
     final HttpServletResponse response 
    ) throws IOException, ServletException { 
    ... // I want to log here, what do I write? 

Какие подводные камни, зная, что есть более чем один веб-приложение работает на том же сервере Tomcat? (по-видимому, из чтения различных вопросов есть много gotchas).

Как насчет .war, мне нужно поместить log4j/sl4f/commons-logging/whatever в мой .war?

Например, я читал, что, и я путь более запутанным, чем раньше:

http://tomcat.apache.org/tomcat-6.0-doc/logging.html

ответ

1

Как и где мои Webapps должны делать свою регистрацию?

зависит от цели. Вы можете использовать ServletContext#log() (который, в свою очередь, доступен в сервлетах по унаследованному методу getServletContext()), чтобы зарегистрировать его в том же файле журнала, что и сам servletcontainer, или перейти на отдельный логгер/файл журнала с помощью под каждым slf4j и/или logback/log4j. Общей практикой является предоставление каждому webapp собственного регистратора, чтобы у вас было больше свободы и контроля при регистрации.

Для интересующего вас дела here является викториной Tomcat относительно предмета.

Что такое gotchas, зная, что на одном и том же Tomcat работает более одного webapp? (по-видимому, из чтения различных вопросов есть много gotchas).

Если это касается лесозаготовок: вы будете в конечном итоге с плохим обзором в логфайл и меньше свободы и контроля в регистрации отдельных WebApps.

Что относительно .war, мне нужно поместить log4j/sl4f/commons-logging/whatever в мой .war?

Независимо от используемой библиотеки: Если это специфично для webapp, поместите ее в WAR. Если это распространено для всех веб-приложений, поместите его в общую библиотеку appserver. Если это специфично для сервера приложений, поместите его в lib сервера apps.

+0

@BalusC: +1 но ... Все эти ссылки ** страшные **. Все они указывают на документ и примеры, полные слов типа «он, по-видимому, работает», «лучший подход может быть ...» и т. Д.Я пробовал * getServletContext() *, но не смог заставить его работать. Я поражен уровнем сложности, связанным с чем-то, что, по моему мнению, было бы тривиальным. – SyntaxT3rr0r

+0

Ну, это всего лишь вопрос вкуса и «хорошей практики». Никто не запрещает вам использовать 'ServletContext # log()', но обычной практикой является то, что вы не используете его для серьезной работы по регистрации. Wrt 'getServletContext()' part: он должен быть доступен, если ваш сервлет расширяет хотя бы «GenericServlet» ('HttpServlet' делает). Внутри вашего метода 'doGet()' вы должны иметь возможность просто 'getServletContext(). Log (" message ");'. – BalusC

+0

@BalusC: gotcha, как быстрый «взлом». Я использую метод getServletContext(), который отлично подходит для моего 23 KB .war;) Я рассмотрю более понятные подходы и commons-logging/juli/log4j позже :) – SyntaxT3rr0r

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