【发布时间】:2011-06-02 02:08:57
【问题描述】:
我刚刚花了 3 个小时的大部分时间试图让我的 Rails 应用程序使用 Log4j 进行日志记录。我终于让它工作了,但我不确定我所做的是否正确。直到最后一次尝试,我尝试了各种方法都无济于事。所以我真的在这里寻找一些验证,也许还有一些指示和提示——老实说,任何事情都会受到赞赏。我将我所有的弱方法总结为以下三种尝试。我希望能对我每次尝试出错的地方有所启发——即使这意味着我被撕毁了。
提前感谢您的帮助!
系统规格
- Rails 3.0
- Windows Server 2008
- Log4j 1.2
- Tomact 6.0.29
- Java 6
尝试 1 - 将 Tomcat 配置为使用 Log4J
我基本上遵循了 Apache Tomcat 网站here 上的指南。步骤是:
- 在
$CATALINA_HOME/lib中创建一个log4j.properties文件 - 下载
log4j-x.y.z.jar并将其复制到$CATALINA_HOME/lib - 将
$CATALINA_HOME/bin/tomcat-juli.jar替换为 Apache Tomcat Extras 文件夹中的tomcat-juli.jar - 将
tomcat-juli-adapters.jar从 Apache Tomcat Extras 文件夹复制到$CATALINA_HOME/lib - 删除
$CATALINA_BASE/conf/logging.properties - 启动 Tomcat(作为服务)
根据指南的预期结果
我应该在我的$CATALINA_BASE/logs 文件夹中看到一个tomcat.log 文件。
实际结果
- 没有 tomcat.log
- 看到了三个标准日志
jakarta_service_20101231.logstderr_20101231.logstdout_20101231.log
问题
- 我不应该至少看过一个
tomcat.log文件吗?
尝试 2 - 使用默认 Tomcat 日志记录(commons-logging)
- 还原了之前设置的所有更改
-
通过执行以下操作修改
$CATALINA_BASE/conf/logging.properties:- 在
handlers行中为我的应用程序添加一个设置: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
- 在
-
通过根据 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> 重新启动 Tomcat
结果
- 已创建日志文件 (
rails3.log),但文件中没有日志信息。
尝试 2A - 将 Log4j 与现有设置一起使用
我决定用这个新的web.xml 设置再试一次 Log4j。
- 将
log4j.jar复制到我的WEB-INF/lib文件夹中 -
创建了一个
log4j.properties文件并放入WEB-INF/classeslog4j.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 重新启动 Tomcat
结果
与尝试 2 相同
注意:我使用 log4j.logger.javax.servlet=DEBUG 是因为我在 jruby-rack README 中读到所有日志输出都会自动重定向到 javax.servlet.ServletContext#log 方法。所以我以为这会捕捉到它,但我显然错了。
问题
- 为什么这不起作用?
- Log4J 不是使用
commons_loggingAPI 吗?
尝试 3 - 试用 slf4j(已工作)
有点不确定为什么尝试 2A 不起作用,我心想,也许我不能将 commons_logging 用于 jruby.rack.logging 参数,因为它可能没有使用 commons_logging API...(但是我仍然不确定)。我看到slf4j 是一个选项。我从来没有听说过它,出于好奇,我决定查一下。在简要阅读后,我认为它和任何一个镜头一样好,并决定按照here 的说明进行尝试。
继续尝试 2A 的设置:
- 将
slf4j-api-1.6.1.jar和slf4j-simple-1.6.1.jar复制到我的WEB-INF/lib文件夹中 - 我还将
slf4j-log4j12-1.6.1.jar复制到我的WEB-INF/lib文件夹中 - 重新启动 Tomcat
还有维奥拉!现在,我的 rails3.log 文件中包含了日志信息。
所以最大的问题是:
WTF?
尽管现在日志记录似乎可以正常工作,但我真的不确定我所做的是否正确。所以就像我之前说的,我真的或多或少地在寻找一些验证。如果您有任何指示/提示/建议,我也将不胜感激。谢谢!
【问题讨论】:
标签: log4j ruby-on-rails-3 tomcat6 jrubyonrails jruby-rack