Я только что провел большую часть 3 часов, пытаясь получить регистрацию моего приложения Rails с помощью Log4j. Наконец-то у меня это заработало, но я не уверен, что то, что я сделал, правильно. Я пробовал различные методы безрезультатно до самой последней попытки. Поэтому я действительно ищу здесь подтверждение, возможно, также несколько указателей и советов - если честно, все будет оценено. Я суммировал все свои слабые методы в три попытки ниже. Я надеюсь на некоторое просветление о том, где я ошибался с каждой попыткой - даже если это означает, что меня разорвут.
Спасибо за помощь в продвижении!
Системные характеристики
- Рельсы 3.0
- Windows Сервер 2008
- Лог4дж 1.2
- Томакт 6.0.29
- Ява 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
- Saw three of the standard logs instead
jakarta_service_20101231.log
stderr_20101231.log
stdout_20101231.log
Вопрос
- Разве я не должен был хотя бы увидеть файл
tomcat.log
?
Попытка 2 — использовать ведение журнала Tomcat по умолчанию (общее ведение журнала)
- Отменены все изменения из предыдущей настройки
Изменил
$CATALINA_BASE/conf/logging.properties
, выполнив следующие действия:- Adding a setting for my application in the
handlers
line: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
- Adding a setting for my application in the
Изменил мой
web.xml
, добавив следующий параметр контекста в соответствии с разделом Logging в файле README jruby-rack (я также соответствующим образом изменил свой warbler.rb, но решил изменитьweb.xml
напрямую, чтобы быстрее тестировать).<context-param> <param-name>jruby.rack.logging</param-name> <param-value>commons_logging</param-value> </context-param>
Перезапущенный Томкэт
Результаты
- Был создан файл журнала (
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
Перезапущенный Томкэт
Результаты
То же, что и попытка 2
ПРИМЕЧАНИЕ. Я использовал log4j.logger.javax.servlet=DEBUG
, потому что прочитал в файле README jruby-rack, что все выходные данные журнала автоматически перенаправляются на метод javax.servlet.ServletContext#log
. Так что я думал, что это захватит его, но я был явно неправ.
Вопрос
- Почему это не сработало?
- Разве Log4J не использует
commons_logging
API?
Попытка 3 - Пробовал slf4j (РАБОТАЛ)
Немного не зная, почему попытка 2A не сработала, я подумал про себя, может быть, я не могу использовать 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
- Перезапущенный Томкэт
И ВИОЛА! Теперь у меня есть информация о журнале, поступающая в мой файл rails3.log.
Итак, большой вопрос:
ВТФ?
Несмотря на то, что ведение журнала теперь работает, я действительно не уверен, правильно ли я сделал. Итак, как я уже сказал ранее, я действительно ищу более или менее подтверждение. Я также был бы признателен за любые указатели/советы/советы, если они у вас есть. Спасибо!