使用log4 jruby-rack上的log4j进行日志记录,以获取Rails 3应用程序

Joh*_*ohn 7 log4j jrubyonrails tomcat6 jruby-rack ruby-on-rails-3

我花了3个小时的时间来尝试使用Log4j来记录我的Rails应用程序.我终于让它运转了,但我不确定我所做的是否正确.在我最后一次尝试之前,我尝试了各种方法无济于事.所以我真的在这里寻找一些验证,也许还有一些指示和提示 - 诚实地说,任何事情都会受到赞赏.我将我所有的微弱方法总结为以下三次尝试.我希望对每次尝试出错的地方有一些启示 - 即使这意味着我会被撕掉.

我在这里先向您的帮助表示感谢!

系统规格

  • 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-x.y.z.jar$CATALINA_HOME/lib
  3. 替换$CATALINA_HOME/bin/tomcat-juli.jartomcat-juli.jar从的Apache Tomcat Extras文件夹
  4. 复制tomcat-juli-adapters.jar从Apache Tomcat上Extras文件夹成$CATALINA_HOME/lib
  5. 删除 $CATALINA_BASE/conf/logging.properties
  6. 启动Tomcat(作为服务)

根据指南预期的结果

我应该tomcat.log在我的$CATALINA_BASE/logs文件夹中看到一个文件.

实际结果

  • 没有tomcat.log
  • 看到三个标准日志
    • jakarta_service_20101231.log
    • stderr_20101231.log
    • stdout_20101231.log

  • 我不应该至少看过一个tomcat.log档案吗?

尝试2 - 使用默认的Tomcat日志记录(公共日志记录)

  1. 恢复了之前设置中的所有更改
  2. $CATALINA_BASE/conf/logging.properties通过执行以下操作修改:

    1. handlers在行中为我的应用程序添加设置:5rails3.org.apache.juli.FileHandler
    2. 添加Handler特定属性

      5rails3.org.apache.juli.FileHandler.level = FINE
      5rails3.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
      5rails3.org.apache.juli.FileHandler.prefix = rails3.
      
      Run Code Online (Sandbox Code Playgroud)
    3. 添加Facility特定属性

      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
      
      Run Code Online (Sandbox Code Playgroud)
  3. 修改了web.xml通过添加以下上下文参数为每JRuby的机架自述的日志记录部分(I也相应地修改我的warbler.rb,但我选择改变web.xml直接更快地测试的东西).

    <context-param>
      <param-name>jruby.rack.logging</param-name>
      <param-value>commons_logging</param-value>
    </context-param>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 重启Tomcat

结果

  • 创建了一个日志文件(rails3.log),但文件中没有日志信息.

尝试2A - 将Log4j与现有设置一起使用

我决定用这个新web.xml设置给Log4j另一个旋转.

  1. 复制log4j.jar到我的WEB-INF/lib文件夹中
  2. 创建了一个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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 重启Tomcat

结果

与尝试2相同

注意:log4j.logger.javax.servlet=DEBUG之所以使用,是因为我在jruby-rack README中读取了所有日志输出都自动重定向到该javax.servlet.ServletContext#log方法.所以我认为这会抓住它,但我显然是错的.

  1. 为什么这不起作用?
  2. Log4J不是使用commons_loggingAPI吗?

尝试3 - 试过slf4j(工作)

有点不确定为什么尝试2A不起作用,我想,也许我不能commons_logging用于jruby.rack.logging参数,因为它可能不使用commons_loggingAPI ...(但我仍然不确定).我看到slf4j了一个选择.我从来没有听说过它,出于好奇,我决定把它抬起来.在简要地阅读了它之后,我认为它和任何一个一样好,并且决定按照这里的说明进行尝试.

继续尝试2A的设置:

  1. 复制slf4j-api-1.6.1.jarslf4j-simple-1.6.1.jar进入我的WEB-INF/lib文件夹
  2. 我也复制slf4j-log4j12-1.6.1.jar到我的WEB-INF/lib文件夹中
  3. 重启Tomcat

还有VIOLA!我现在有记录信息进入我的rails3.log文件.

所以最大的问题是:

WTF?

尽管现在记录似乎正在运行,但我真的不确定我所做的是否正确.就像我之前说的那样,我真的在寻找或多或少的验证.如果你有任何指针/提示/建议,我也很感激.谢谢!

so_*_*_mv 2

我们也做了各种实验,最终选择了 slf4j 选项。我们有 Java 背景,知道 slf4j,所以我们没有进一步深入。

<context-param>
   <param-name>jruby.rack.logging</param-name>
   <param-value>slf4j</param-value>
 </context-param>
Run Code Online (Sandbox Code Playgroud)

顺便说一句,使用 slf4j-log4jxxx.jar 时无需将 slf4j-simple-1.6.1.jar 复制到 tomcat/lib 或 WEB-INF/lib 中