Ведение журнала с помощью log4j на tomcat jruby-rack для приложения Rails 3

Я просто потратил большую часть 3 часов, пытаясь получить логирование моего приложения Rails с помощью Log4j. Наконец-то он заработал, но я не уверен, что то, что я сделал, правильно. Я безуспешно пробовал разные методы до самой последней попытки. Так что я действительно ищу здесь подтверждения, возможно, несколько указателей и советов - если честно, все будет полезно. Ниже я суммировал все свои слабые методы в три попытки. Я надеюсь на некоторое понимание того, где я ошибался с каждой попыткой - даже если это означает, что меня разорвет.

Заранее благодарим за помощь!

Системные характеристики

  • Rails 3.0
  • Windows Server 2008
  • Log4j 1.2
  • Tomact 6.0.29
  • Java 6

Попытка 1 - настроена Tomcat для использования Log4J

Я в основном следовал руководству на веб-сайте Apache Tomcat здесь . Шаги:

  1. Создайте файл log4j.properties в $ CATALINA_HOME / lib
  2. Загрузите и скопируйте log4j-xyzjar в $ CATALINA_HOME / lib
  3. Замените $ CATALINA_HOME / bin / tomcat-juli.jar на tomcat-juli.
    • jakarta_service_20101231.log
    • stderr_20101231.log
    • stdout_20101231.log
  4. Вопрос

  • Разве я не должен был хотя бы увидеть файл tomcat.log ?

Попытка 2 - Использовать ведение журнала Tomcat по умолчанию (commons-logging)

  1. Отменил все изменения предыдущей настройки
  2. Изменен $ CATALINA_BASE / conf / logging.properties , выполнив следующие действия:

    1. Добавление настройки для моего приложения в строке обработчиков : 5rails3.org.apache.juli.FileHandler
    2. Добавление особых свойств обработчика

       5rails3.org.apache.juli.FileHandler.level = FINE
      5rails3.org.apache.juli.FileHandler.directory = $ {catalina.base} / журналы
      5rails3.org.apache.juli.FileHandler.prefix = rails3.
      
    3. Добавление свойств объекта

       org.apache.catalina.core.ContainerBase. [Catalina]. [Localhost]. [/ Rails3] .level = INFO
      org.apache.catalina.core.ContainerBase. [Каталина]. [localhost]. [/ rails3] .handlers = 4host-manager.org.apache.juli.FileHandler
      
  3. Изменил мой web.xml , добавив следующий параметр контекста в соответствии с разделом Logging файла README jruby-rack (я также соответствующим образом изменил свой warbler.rb, но решил изменить web.xml , чтобы быстрее тестировать).

      jruby.rack.logging  commons_logging 
  4. Перезапуск Tomcat

Результаты

  • Был создан файл журнала ( rails3.log ), однако в нем не было информации журнала.

Попытка 2A - использовать Log4j с существующим набором вверх

Я решил дать Log4j еще один круговорот с этой новой настройкой web.xml .

  1. Скопировал log4j.jar в свой WEB-INF / lib папка
  2. Создает файл log4j.properties и помещает его в WEB-INF / classes

     log4j.rootLogger = INFO, R
    log4j.logger.javax.servlet = ОТЛАДКА
    
    log4j.appender.R = org.apache.log4j.RollingFileAppender
    log4j.appender.R.File = $ {catalina.base} /logs/rails3.log
    log4j.appender.R.MaxFileSize = 5036 КБ
    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
    
  3. Перезапуск Tomcat

Результаты

То же, что и попытка 2

ПРИМЕЧАНИЕ: Я использовал log4j.logger.javax.servlet = DEBUG , потому что я прочитал в файле README jruby-rack что весь вывод журнала автоматически перенаправляется в метод javax.servlet.ServletContext # log . Я думал, что это зафиксирует это, но я был явно неправ.

Вопрос

  1. Почему это не сработало?
  2. Разве Log4J не использует API commons_logging ?

Попытка 3 - Пробовал slf4j (РАБОТАЕТ)

Немного неуверенно, почему попытка 2A не сработала, подумал я про себя, может быть, я не могу использовать commons_logging для jruby.rack .logging , потому что он, вероятно, не использует API commons_logging ... (но я все еще не был уверен). Я видел slf4j как вариант. Я никогда об этом не слышал и из любопытства решил поискать. Прочитав вкратце об этом, я подумал, что это так же хорошо, как и любой другой, и решил попробовать, следуя инструкциям здесь .

Продолжая настройку попытки 2A:

  1. Скопировано slf4j-api-1.6.1.jar и slf4j-simple-1.6.1.jar в мою папку WEB-INF / lib
  2. Я также скопировал slf4j-log4j12-1.6.1.jar в мою папку WEB-INF / lib
  3. Перезапуск Tomcat

И VIOLA ! Теперь у меня есть информация о журналах, хранящаяся в моем файле rails3.log .

Итак, большой вопрос:

WTF?

Хотя ведение журнала, похоже, сейчас работает, я действительно не уверен, правильно ли то, что я сделал. Итак, как я сказал ранее, я действительно ищу более или менее какое-то подтверждение. Я также был бы признателен за любые указатели / подсказки / советы, если они у вас есть. Спасибо!

7
задан John 1 January 2011 в 22:20
поделиться