【问题标题】:Logging with log4j on tomcat jruby-rack for a Rails 3 application在 tomcat jruby-rack 上使用 log4j 记录 Rails 3 应用程序
【发布时间】:2011-06-02 02:08:57
【问题描述】:

我刚刚花了 3 个小时的大部分时间试图让我的 Rails 应用程序使用 Log4j 进行日志记录。我终于让它工作了,但我不确定我所做的是否正确。直到最后一次尝试,我尝试了各种方法都无济于事。所以我真的在这里寻找一些验证,也许还有一些指示和提示——老实说,任何事情都会受到赞赏。我将我所有的弱方法总结为以下三种尝试。我希望能对我每次尝试出错的地方有所启发——即使这意味着我被撕毁了。

提前感谢您的帮助!

系统规格

  • Rails 3.0
  • Windows Server 2008
  • Lo​​g4j 1.2
  • Tomact 6.0.29
  • Java 6

尝试 1 - 将 Tomcat 配置为使用 Log4J

我基本上遵循了 Apache Tomcat 网站here 上的指南。步骤是:

  1. $CATALINA_HOME/lib 中创建一个log4j.properties 文件
  2. 下载log4j-x.y.z.jar并将其复制到$CATALINA_HOME/lib
  3. $CATALINA_HOME/bin/tomcat-juli.jar 替换为 Apache Tomcat Extras 文件夹中的 tomcat-juli.jar
  4. tomcat-juli-adapters.jar 从 Apache Tomcat Extras 文件夹复制到 $CATALINA_HOME/lib
  5. 删除$CATALINA_BASE/conf/logging.properties
  6. 启动 Tomcat(作为服务)

根据指南的预期结果

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

实际结果

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

问题

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

尝试 2 - 使用默认 Tomcat 日志记录(commons-logging)

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

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

      5rails3.org.apache.juli.FileHandler.level = FINE
      5rails3.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
      5rails3.org.apache.juli.FileHandler.prefix = rails3.
      
    3. 添加设施特定属性

      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
      
  3. 通过根据 jruby-rack README 的 Logging 部分添加以下上下文参数修改了我的 web.xml(我也相应地修改了我的 warbler.rb,但我选择直接更改 web.xml 以更快地测试事情) .

    <context-param>
      <param-name>jruby.rack.logging</param-name>
      <param-value>commons_logging</param-value>
    </context-param>
    
  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
    
  3. 重新启动 Tomcat

结果

与尝试 2 相同

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

问题

  1. 为什么这不起作用?
  2. Lo​​g4J 不是使用commons_logging API 吗?

尝试 3 - 试用 slf4j(已工作)

有点不确定为什么尝试 2A 不起作用,我心想,也许我不能将 commons_logging 用于 jruby.rack.logging 参数,因为它可能没有使用 commons_logging API...(但是我仍然不确定)。我看到slf4j 是一个选项。我从来没有听说过它,出于好奇,我决定查一下。在简要阅读后,我认为它和任何一个镜头一样好,并决定按照here 的说明进行尝试。

继续尝试 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

还有维奥拉!现在,我的 rails3.log 文件中包含了日志信息。

所以最大的问题是:

WTF?

尽管现在日志记录似乎可以正常工作,但我真的不确定我所做的是否正确。所以就像我之前说的,我真的或多或少地在寻找一些验证。如果您有任何指示/提示/建议,我也将不胜感激。谢谢!

【问题讨论】:

    标签: log4j ruby-on-rails-3 tomcat6 jrubyonrails jruby-rack


    【解决方案1】:

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

    <context-param>
       <param-name>jruby.rack.logging</param-name>
       <param-value>slf4j</param-value>
     </context-param>
    

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

    【讨论】:

      【解决方案2】:

      由于 bufferSize 的原因,您早期使用 commons-logging 进行的测试可能会显示零字节文件。

      如果在您停止 Tomcat 时您的条目被刷新到文件中,那么确实是这种情况,并且您违反了默认的 8Kb 缓冲区。

      要禁用,立即冲洗试试...

      org.apache.juli.FileHandler.bufferSize = -1

      在特定的处理程序上...

      所以对于本地主机...

      2localhost.org.apache.juli.FileHandler.bufferSize = -1

      【讨论】:

        猜你喜欢
        • 2011-01-21
        • 1970-01-01
        • 2012-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-26
        • 2011-04-22
        • 1970-01-01
        相关资源
        最近更新 更多