我刚刚花了 3 个小时的大部分时间试图让我的 Rails 应用程序使用 Log4j 进行日志记录。我终于让它工作了,但我不确定我所做的是否正确。直到最后一次尝试,我尝试了各种方法都无济于事。所以我真的在这里寻找一些验证,也许还有一些指示和提示——老实说,任何事情都会受到赞赏。我将我所有的弱方法总结为以下三种尝试。我希望能对我每次尝试出错的地方有所启发——即使这意味着我被撕毁了。
我在这里先向您的帮助表示感谢!
系统规格
- 导轨 3.0
- 视窗服务器 2008
- 日志4j 1.2
- Tomact 6.0.29
- 爪哇 6
尝试 1 - 将 Tomcat 配置为使用 Log4J
我基本上遵循了 Apache Tomcat 网站上的指南。步骤是:
- 在中创建
log4j.properties
文件$CATALINA_HOME/lib
- 下载并复制
log4j-x.y.z.jar
到$CATALINA_HOME/lib
- 替换
$CATALINA_HOME/bin/tomcat-juli.jar
为tomcat-juli.jar
Apache Tomcat Extras 文件夹中的 - 从 Apache Tomcat Extras 文件夹复制
tomcat-juli-adapters.jar
到$CATALINA_HOME/lib
- 删除
$CATALINA_BASE/conf/logging.properties
- 启动 Tomcat(作为服务)
根据指南的预期结果
我应该tomcat.log
在我的$CATALINA_BASE/logs
文件夹中看到一个文件。
实际结果
- 没有tomcat.log
- 而是看到了三个标准日志
jakarta_service_20101231.log
stderr_20101231.log
stdout_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/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
重新启动Tomcat
结果
与尝试 2 相同
注意:我之所以使用log4j.logger.javax.servlet=DEBUG
,是因为我在 jruby-rack README 中读到所有日志记录输出都会自动重定向到该javax.servlet.ServletContext#log
方法。所以我认为这会捕捉到它,但我显然错了。
问题
- 为什么这不起作用?
- Log4J 不使用
commons_logging
API 吗?
尝试 3 - 试用 slf4j(已工作)
有点不确定为什么尝试 2A 不起作用,我心想,也许我不能commons_logging
用于jruby.rack.logging
参数,因为它可能没有使用commons_logging
API ......(但我仍然不确定)。我认为slf4j
这是一种选择。我从来没有听说过它,出于好奇,我决定查一下。在简要阅读了它之后,我认为它和任何一个镜头一样好,并决定按照这里的说明进行尝试。
继续尝试 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文件。
所以最大的问题是:
怎么回事?
尽管现在日志记录似乎正在工作,但我真的不确定我所做的是否正确。所以就像我之前说的,我真的或多或少地在寻找一些验证。如果您有任何指示/提示/建议,我也将不胜感激。谢谢!