Подтвердить что ты не робот

Как записать вывод stdout в Tomcat?

Есть ли способ зарегистрировать весь вывод stdout в файле catalina.log в Tomcat? (т.е. все, что печатается на System.out.println())

Окно консоли, которое открывается при запуске TOMCAT/bin/startup.bat, выводит вывод из stdout, но не сохраняется в TOMCAT/logs/catalina.<date>.log.

Моя особая проблема заключается в том, что у меня есть консольный appender, определенный в log4j для вывода на консоль. Эти сообщения журнала отображаются правильно в окне консоли Tomcat, но они не записываются в файл catalina.log. Я запускаю Tomcat 5.5 в Windows. Спасибо.

EDIT:

Вот мой файл log4j.properties. Он расположен в TOMCAT/webapps/app/WEB-INF/classes/log4j.properties:

log4j.rootCategory=DEBUG, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%d{ABSOLUTE} %-5p %c{1}]: %m%n
4b9b3361

Ответ 1

Я сталкивался с подобными вопросами раньше и не нашел способа сделать это, зарегистрировав System.out в Windows если вы не используете Tomcat в качестве службы Windows. Кажется, что это работает по умолчанию в Unix, поскольку startup.sh указывает на catalina.sh, который записывает stdout в файл catalina.out, как показано ниже

org.apache.catalina.startup.Bootstrap "[email protected]" start >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &

В log4j ConsoleAppender сам по себе не добавляется к файлу, только к System.out

Однако, я изменил ваши свойства log4j, чтобы добавить FileAppender, и эта конфигурация работает, но, конечно, это ведет журнал в отдельный файл журнала.

Новая конфигурация

# Set root logger level to DEBUG.
log4j.rootLogger=DEBUG, console, myFile

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%d{ABSOLUTE} %-5p %c{1}]: %m%n




# myFile writes to file
log4j.appender.myFile=org.apache.log4j.RollingFileAppender
log4j.appender.myFile.File=logs/tomcatlog4j.log
log4j.appender.myFile.MaxFileSize=100KB
log4j.appender.myFile.layout=org.apache.log4j.PatternLayout
log4j.appender.myFile.layout.ConversionPattern==[%d{ABSOLUTE} %-5p %c{1}]: %m%n

Выход

= [15: 24: 03,819 INFO A1]: В my.jsp = [15: 24: 03,975 INFO A1]: Из my.jsp = [15: 24: 04,880 INFO A1]: В my.jsp = [15: 24: 04,880 INFO A1]: Из my.jsp

также см.

Как регистрировать исключения из определенного пакета, развернутого в tomcat

регистрировать события в отдельном файле

https://serverfault.com/questions/201178/tomcat-5-5-how-to-redirect-the-logging-output-to-one-file-per-web-application

Ответ 2

Вы проверили, можно ли найти файл log4j.properties из вашего приложения? Возможно, вы можете проверить, установив жесткий путь к файлу, например

-Dlog4j.configuration = Файл:///C:\Dev\log4j.properties

Если журналы записываются после этих изменений, путь релятивирования к файлу log4j неверен.

Ответ 3

Если я посмотрю конфигурацию logging по умолчанию для tomcat 5.5 в logging.properties:

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler

Это выглядит так, как если бы stdout веб-приложений мог регистрироваться в файлах только для уровня INFO и выше, учитывая, что http://tomcat.apache.org/tomcat-5.5-doc/logging.html состояния что в логгерах регистрации журнала tomcat JULI не используются родительские обработчики, когда им назначаются собственные обработчики. Также файл должен иметь префикс localhost, а не catalina. Но тогда я не понимаю, как вывод поступает в ваше окно вывода:/