7

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

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

系统规格

  • 导轨 3.0
  • 视窗服务器 2008
  • 日志4j 1.2
  • Tomact 6.0.29
  • 爪哇 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.jarApache Tomcat Extras 文件夹中的
  4. 从 Apache Tomcat Extras 文件夹复制tomcat-juli-adapters.jar$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 日志记录 (commons-logging)

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

    1. 在行中为我的应用程序添加设置handlers5rails3.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. 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

还有维奥拉!我现在有日志信息进入我的rails3.log文件。

所以最大的问题是:

怎么回事?

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

4

2 回答 2

2

我们也做了各种实验,最终选择了 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 中

于 2011-01-22T00:20:58.883 回答
0

由于 bufferSize 的原因,您使用公共日志记录的早期测试可能会显示零字节文件。

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

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

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

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

所以对于本地主机...

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

于 2013-07-04T13:45:48.333 回答