Я потратил большую часть трех часов, пытаясь получить логирование моего Rails-приложения с помощью Log4j.У меня наконец получилось, но я не уверен, правильно ли я поступил.Я пробовал разные методы безрезультатно до самой последней попытки.Так что я действительно ищу здесь подтверждение, возможно, несколько указателей и советов - все было бы признательно, если честно.Я суммировал все мои слабые методы в три попытки ниже.Я надеюсь на некоторое понимание того, где я ошибался с каждой попыткой - даже если это означает, что меня разрывают.
Заранее спасибо за помощь!
Технические характеристики системы
- Rails 3.0
- Windows Server 2008
- Log4j 1.2
- Tomact 6.0.29
- Java 6
Попытка 1 - настройка Tomcat для использования Log4J
Я в основном следовал руководству на веб-сайте Apache Tomcat здесь .Шаги:
- Создайте файл
log4j.properties
в $CATALINA_HOME/lib
- Загрузите и скопируйте
log4j-x.y.z.jar
в $CATALINA_HOME/lib
- Замените
$CATALINA_HOME/bin/tomcat-juli.jar
с tomcat-juli.jar
из папки Apache Tomcat Extras - Скопируйте
tomcat-juli-adapters.jar
из папки Apache Tomcat Extras в $CATALINA_HOME/lib
- Удалить
$CATALINA_BASE/conf/logging.properties
- Запустите Tomcat (как услуга)
Ожидаемые результаты согласно Руководству
Я должен был увидеть файл tomcat.log
в своей папке $CATALINA_BASE/logs
.
Фактические результаты
- Нет tomcat.log
- Вместо трех стандартных журналов
jakarta_service_20101231.log
stderr_20101231.log
stdout_20101231.log
Вопрос
- Разве я не видел хотя бы файл
tomcat.log
?
Попытка 2 - Использовать ведение журнала Tomcat по умолчанию (регистрация общего доступа)
- Отменить все изменения из предыдущей настройки
Изменить $CATALINA_BASE/conf/logging.properties
, выполнивследующее:
- Добавление настройки для моего приложенияВ строке
handlers
: 5rails3.org.apache.juli.FileHandler
Добавление специфических свойств обработчика
5rails3.org.apache.juli.FileHandler.level = FINE
5rails3.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
5rails3.org.apache.juli.FileHandler.prefix = rails3.
Добавление специфических свойств объекта
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/rails3].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/rails3].handlers = 4host-manager.org.apache.juli.FileHandler
Модифицировал мой web.xml
, добавив следующий контекстный параметр в соответствии с разделом «Ведение журнала» в README jruby-rack (я также соответственно изменил свой warbler.rb, но я выбрализмените web.xml
непосредственно для более быстрого тестирования).
<context-param>
<param-name>jruby.rack.logging</param-name>
<param-value>commons_logging</param-value>
</context-param>
Перезапущен Tomcat
Результаты
- Файл журнала был создан (
rails3.log
), однако в нем не было никакой информации журнала.
Попытка 2A - Использовать Log4j с существующей настройкой
Я решил датьLog4j еще один вихрь с этой новой настройкой web.xml
.
- Скопировал
log4j.jar
в мою папку WEB-INF/lib
Создал файл log4j.properties
и поместил его вWEB-INF/classes
log4j.rootLogger=INFO, R
log4j.logger.javax.servlet=DEBUG
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.base}/logs/rails3.log
log4j.appender.R.MaxFileSize=5036KB
log4j.appender.R.MaxBackupIndex=4
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss} [%t] %-5p %c %x - %m%n
Перезапущенный Tomcat
Результаты
То же, что и попытка 2
НЕE: Я использовал log4j.logger.javax.servlet=DEBUG
, потому что я прочитал в README jruby-rack, что весь вывод журнала автоматически перенаправляется на метод javax.servlet.ServletContext#log
.Поэтому я подумал, что это захватит это, но я был явно неправ.
Вопрос
- Почему это не сработало?
- Разве Log4J не использует
commons_logging
API?
Попытка 3 - пробовал slf4j (РАБОТАЕТ)
Немного неуверенно, почему Попытка 2А не сработала, подумал я, возможно, смогуt commons_logging
используется для параметра jruby.rack.logging
, потому что он, вероятно, не использует commons_logging
API ... (но я все еще не был уверен).Я видел slf4j
как вариант.Я никогда не слышал об этом и из любопытства решил поискать.После краткого прочтения я подумал, что это был хороший выстрел, и решил попробовать его, следуя инструкциям здесь .
Продолжая настройку Попытки 2А:
- Скопировал
slf4j-api-1.6.1.jar
и slf4j-simple-1.6.1.jar
в мою WEB-INF/lib
папку - Я также скопировал
slf4j-log4j12-1.6.1.jar
в мою WEB-INF/lib
папку - Перезапустил Tomcat
И ВИОЛА !Теперь у меня есть информация о регистрации в моем файле rails3.log .
Итак, большой вопрос:
WTF?
Даже если регистрация кажетсяработать сейчас, я действительно не уверен, что то, что я сделал, правильно.Итак, как я уже говорил ранее, я действительно ищу некоторую проверку более или менее.Я также буду признателен за любые указания / советы / советы, если у вас есть.Спасибо!