在 Tomcat jruby-rack 上使用 log4j 记录 Rails 3 应用程序

2023-11-26

我刚刚花了 3 个小时的大部分时间尝试使用 Log4j 来记录我的 Rails 应用程序。我终于让它工作了,但我不确定我所做的是否正确。我尝试了各种方法都没有效果,直到最后一次尝试。所以我真的在这里寻找一些验证,也许还有一些指示和技巧——说实话,任何事情都会受到赞赏。我将所有无效的方法总结为以下三种尝试。我希望能得到一些启发,让我知道我每次尝试的错误在哪里——即使这意味着我会被撕裂。

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

系统规格

  • 导轨3.0
  • Windows Server 2008
  • Log4j 1.2
  • 雄猫6.0.29
  • Java 6

尝试 1 - 配置 Tomcat 以使用 Log4J

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

  1. 创建一个log4j.properties文件输入$CATALINA_HOME/lib
  2. 下载并复制log4j-x.y.z.jar into $CATALINA_HOME/lib
  3. Replace $CATALINA_HOME/bin/tomcat-juli.jartomcat-juli.jar来自 Apache Tomcat Extras 文件夹
  4. Copy tomcat-juli-adapters.jar从 Apache Tomcat Extras 文件夹进入$CATALINA_HOME/lib
  5. Delete $CATALINA_BASE/conf/logging.properties
  6. 启动 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)

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

    1. 在中添加我的应用程序的设置handlers line: 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. 修改了我的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>
    
  4. 重新启动Tomcat

Results

  • 创建了一个日志文件(rails3.log),但是文件中没有日志信息。

尝试 2A - 在现有设置中使用 Log4j

我决定用这个新工具再次尝试 Log4jweb.xml环境。

  1. 复制了log4j.jar进入我的WEB-INF/lib folder
  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

Results

与尝试 2 相同

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

Question

  1. 为什么这不起作用?
  2. Log4J 不是使用commons_logging API?

尝试 3 - 尝试了 slf4j(已成功)

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

继续尝试 2A 的设置:

  1. Copied slf4j-api-1.6.1.jar and slf4j-simple-1.6.1.jar进入我的WEB-INF/lib folder
  2. 我也复制了slf4j-log4j12-1.6.1.jar进入我的WEB-INF/lib folder
  3. 重新启动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(使用前将#替换为@)

在 Tomcat jruby-rack 上使用 log4j 记录 Rails 3 应用程序 的相关文章

随机推荐

  • 只写属性有实际应用吗?

    我不知道为什么我开始思考这个问题 但现在我似乎无法停止 在 C 中 可能还有很多其他语言 我记得 Delphi 也曾经让你这样做 编写以下语法是合法的 class WeirdClass private void Hello string n
  • 为什么password_verify返回false?

    我在用着password verify检查我的哈希密码 我有 PHP 5 5 get result row as an object result row result of login check gt fetch object usin
  • 如何将 LanguagePrimitives.GenericZero / get_Zero 添加到 System.String?

    注 我添加了很多Of interest评论在最后 这些并不意味着建议人们应该使用inline and static type parameters 无论如何 它们就在那里 这样人们就不必花费数小时搜索与此问题相关的大量 SO 问题来更好地理
  • Java:Cloneable 接口的基本原理

    为什么不是 clone 中指定的方法java lang Cloneable界面 基本上 这是一个损坏的接口 肯 阿诺德 Ken Arnold 和比尔 维纳斯 Bill Venners 在Java 设计问题 Arnold 如果我在这一点上是上
  • http_parse_headers 与 PECL_HTTP

    我想用http parse headers所以 我已经安装了依赖项pecl http 2 4 3 2 2 5 并打电话http parse headers功能没有成功 function exists 总是失败我在这里缺少什么吗 我在用着 C
  • React 和 Webpack:加载图像并将其显示为背景图像

    我正在创建一个类似横幅的组件 并将图像设置为组件的背景 但我无法让它工作 我尝试了网上发布的不同建议 但没有成功 目前我不确定我的错误是否在反应代码中 或者是 webpack 没有正确加载文件 这是我的文件结构 AppFolder clie
  • 如何计算PCKE的code_verifier?

    我正在经历Okta PKCE 流程演示为了更好地理解它是如何工作的 但我在重现同样的事情时遇到了困难code challenge生成的哈希值code verifier 这是演示的屏幕截图 Using Zg6klgrnixQJ629GsawR
  • ES6/Babel 类构造函数不能在没有“new”的情况下调用

    我正在尝试创建一个自定义羽毛笔主题 扩展气泡主题 我面临一个奇怪的 ES6 继承问题 我似乎无法调用super 在我的构造函数中 这是我的代码 import BubbleTheme BubbleTooltip from quill them
  • .frame(高度: nil) 的 SwiftUI 行为

    问题 我收到一个线程问题 内容为 无效的框架尺寸 负或非有限 这是我的代码 struct CellStyle ViewModifier func body content Content gt some View content frame
  • 从 Node 实例获取完整的 xml 文本

    我用Java读取了XML文件 代码如下 File file new File file xml DocumentBuilderFactory dbf DocumentBuilderFactory newInstance DocumentBu
  • 替换元素中所有出现的字符串

    我想替换给定元素的所有后代元素 的文本 中的特定字符串 innerHTML不能使用 因为该序列可以出现在属性中 我尝试过使用 XPath 但似乎该界面本质上是只读的 因为这仅限于一个元素 所以函数如下document getElements
  • 无法在 python pandas 中获得未堆叠的条形图

    这很奇怪 我似乎无法在 python pandas 中获得未堆叠的条形图 与 pandas 官方指南不同 这些条似乎只是重叠的 而不是横向放置的 知道为什么会这样吗 df plot kind bar stacked False figsiz
  • Java 中的监视器是什么?

    Java并发编程中的监视器指的是什么 当我读到 每个对象都关联一个监视器 时 这是什么意思 它是一个特殊的物体吗 监视器是控制对对象的并发访问的机制 这允许您执行以下操作 主题 1 public void a synchronized so
  • 检测页面是否加载完成

    有没有办法检测页面何时完成加载 即所有内容 javascript 以及 css 和图像等资产 so like if PAGE HAS FINISHED LOADING do something amazing 另外 如果页面加载时间超过 1
  • Oracle EXECUTE IMMEDIATE 到游标中

    我有一个存储过程 它使用了EXECUTE IMMEDIATE命令执行一个很长的字符串 如何支持很长的字符串并将数据返回到引用游标中 假设您的 SQL 不超过 32K 正如 Tony Andrews 暗示的那样 您应该能够使用如下内容 dec
  • 简单自定义类型的“未定义用户定义类型”

    在 Excel 2007 中 我在 VBA 中有以下非常简单的代码 Public Type specType sb As Long End Type Private Sub MyButton Click Dim spec As specTy
  • iPhone SDK - 获取/计算相机视野 (FOV)(增强现实)

    有没有办法通过调用 API 来找出或计算 iPhone 相机的视野 FOV 还是您必须亲自亲自找出答案 如果无法使用 API 获取或计算它 而是必须将其硬编码到应用程序中 那么找出应用程序正在运行的设备类型的最佳方法是什么 不同的设备有不同
  • 使用anaconda在Windows上安装tensorflow

    我正在尝试在我的 Windows PC 上安装 Tensorflow 由于我已经在 Python 3 5 上安装并使用了 Anaconda 因此我已按照说明进行操作https www tensorflow org versions r0 8
  • 如何设置Cmder不换行文本输出

    Cmder 的默认设置是换行文本输出 但如何设置Cmder不换行文本输出呢 Cmder 我的意思是 http cmder net 到目前为止 我不认为有办法禁用文本换行 有人确实提出了相关问题禁用换行 然而 正如特色ConEmu 的路线图
  • 在 Tomcat jruby-rack 上使用 log4j 记录 Rails 3 应用程序

    我刚刚花了 3 个小时的大部分时间尝试使用 Log4j 来记录我的 Rails 应用程序 我终于让它工作了 但我不确定我所做的是否正确 我尝试了各种方法都没有效果 直到最后一次尝试 所以我真的在这里寻找一些验证 也许还有一些指示和技巧 说实