我刚刚花了 3 个小时的大部分时间尝试使用 Log4j 来记录我的 Rails 应用程序。我终于让它工作了,但我不确定我所做的是否正确。我尝试了各种方法都没有效果,直到最后一次尝试。所以我真的在这里寻找一些验证,也许还有一些指示和技巧——说实话,任何事情都会受到赞赏。我将所有无效的方法总结为以下三种尝试。我希望能得到一些启发,让我知道我每次尝试的错误在哪里——即使这意味着我会被撕裂。
我在这里先向您的帮助表示感谢!
系统规格
- 导轨3.0
- Windows Server 2008
- Log4j 1.2
- 雄猫6.0.29
- Java 6
尝试 1 - 配置 Tomcat 以使用 Log4J
我基本上遵循 Apache Tomcat 网站上的指南here。步骤是:
- 创建一个
log4j.properties
文件输入$CATALINA_HOME/lib
- 下载并复制
log4j-x.y.z.jar
into $CATALINA_HOME/lib
- Replace
$CATALINA_HOME/bin/tomcat-juli.jar
与tomcat-juli.jar
来自 Apache Tomcat Extras 文件夹
- Copy
tomcat-juli-adapters.jar
从 Apache Tomcat Extras 文件夹进入$CATALINA_HOME/lib
- Delete
$CATALINA_BASE/conf/logging.properties
- 启动 Tomcat(作为服务)
根据指南的预期结果
我应该看到一个tomcat.log
文件在我的$CATALINA_BASE/logs
folder.
实际结果
- 没有 tomcat.log
- Saw three of the standard logs instead
jakarta_service_20101231.log
stderr_20101231.log
stdout_20101231.log
Question
- 我不应该至少见过一个
tomcat.log
file?
尝试 2 - 使用默认 Tomcat 日志记录 (commons-logging)
- 恢复了之前设置的所有更改
-
修改的$CATALINA_BASE/conf/logging.properties
通过执行以下操作:
- 在中添加我的应用程序的设置
handlers
line: 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
-
修改了我的web.xml
根据 jruby-rack README 的 Logging 部分添加以下上下文参数(我也相应地修改了我的 warbler.rb,但我选择更改web.xml
直接更快地测试)。
<context-param>
<param-name>jruby.rack.logging</param-name>
<param-value>commons_logging</param-value>
</context-param>
重新启动Tomcat
Results
- 创建了一个日志文件(
rails3.log
),但是文件中没有日志信息。
尝试 2A - 在现有设置中使用 Log4j
我决定用这个新工具再次尝试 Log4jweb.xml
环境。
- 复制了
log4j.jar
进入我的WEB-INF/lib
folder
-
创建了一个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
Results
与尝试 2 相同
NOTE: I used log4j.logger.javax.servlet=DEBUG
因为我在 jruby-rack README 中读到所有日志输出都会自动重定向到javax.servlet.ServletContext#log
方法。所以我认为这会捕获它,但我显然错了。
Question
- 为什么这不起作用?
- Log4J 不是使用
commons_logging
API?
尝试 3 - 尝试了 slf4j(已成功)
有点不确定为什么尝试 2A 不起作用,我心想,也许我不能使用commons_logging
为了jruby.rack.logging
参数,因为它可能没有使用commons_logging
API...(但我仍然不确定)。我看见slf4j
作为一个选项。我从来没有听说过,出于好奇,我决定查一查。简要阅读后,我认为这是一个不错的选择,并决定按照说明进行尝试here.
继续尝试 2A 的设置:
- Copied
slf4j-api-1.6.1.jar
and slf4j-simple-1.6.1.jar
进入我的WEB-INF/lib
folder
- 我也复制了
slf4j-log4j12-1.6.1.jar
进入我的WEB-INF/lib
folder
- 重新启动Tomcat
And VIOLA!我现在有日志信息进入我的Rails3.log file.
所以最大的问题是:
WTF?
尽管日志记录现在似乎可以正常工作,但我真的不确定我所做的是否正确。所以就像我之前说的,我确实或多或少地在寻找一些验证。如果您有任何指示/提示/建议,我也将不胜感激。谢谢!
我们也做了各种实验,最终选择了 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 中
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)