如何使用 Rails 3.0.x 配置 Log4r?

2023-12-30

我尝试根据这篇文章使用Rails 3.0.4配置log4r:http://www.dansketcher.com/2007/06/16/integrating-log4r-and-ruby-on-rails/ http://www.dansketcher.com/2007/06/16/integrating-log4r-and-ruby-on-rails/

/Users/toto/.rvm/gems/ruby-1.9.2-p0/gems/log4r-1.1.9/lib/log4r/yamlconfigurator.rb:166:in `sub!': can't convert Pathname into String (TypeError)
    from /Users/toto/.rvm/gems/ruby-1.9.2-p0/gems/log4r-1.1.9/lib/log4r/yamlconfigurator.rb:166:in `block in paramsub'
    from /Users/toto/.rvm/gems/ruby-1.9.2-p0/gems/log4r-1.1.9/lib/log4r/yamlconfigurator.rb:165:in `each'
    from /Users/toto/.rvm/gems/ruby-1.9.2-p0/gems/log4r-1.1.9/lib/log4r/yamlconfigurator.rb:165:in `paramsub'
    from /Users/toto/.rvm/gems/ruby-1.9.2-p0/gems/log4r-1.1.9/lib/log4r/yamlconfigurator.rb:156:in `block in decode_hash_params'

我在 Google 上搜索了 Rails 3 集成,但尚未找到可行的解决方案。任何人都可以向我指出一个工作代码片段,该代码片段将允许使用 YAML 文件进行日志配置并在运行时进行初始化吗?

作为参考,我将示例 logger.rb 放在 config/initializers 文件夹中,将 log4r.yml 放在 config 目录中。

Thanks


呵呵...Log4r的思想来自于著名的“Log4j”,它是我java编程生涯中最喜欢的记录器。 不过log4r的文档实在是太差了,对于新手来说真的很难。让我展示一下我的解决方案:

步骤1。创建log4r配置文件:(文件名:config/log4r.yml)

log4r_config:
  # define all loggers ...
  loggers:
    - name      : production
      level     : WARN
      trace     : 'false'
      outputters :
      - datefile
    - name      : development
      level     : DEBUG
      trace     : 'true'
      outputters :
      - datefile

  # define all outputters (incl. formatters)
  outputters:
  - type: DateFileOutputter
    name: datefile
    dirname: "log"
    # notice the file extension is needed! 
    # if you want the file is named by the process, just comment it,
    # then it will automatically get the same name with its process,
    # e.g.  rails_2017-05-03.log
    filename: "my_app.log" 
    formatter:
      date_pattern: '%H:%M:%S'
      pattern     : '%d %l: %m '
      type        : PatternFormatter

第2步。修改config/application.rb

require 'rails/all'
# add these line for log4r
require 'log4r'
require 'log4r/yamlconfigurator'
require 'log4r/outputter/datefileoutputter'
include Log4r

Bundler.require(:default, Rails.env) if defined?(Bundler)
module Zurich
  class Application < Rails::Application
    #...
    # assign log4r's logger as rails' logger.
    log4r_config= YAML.load_file(File.join(File.dirname(__FILE__),"log4r.yml"))
    YamlConfigurator.decode_yaml( log4r_config['log4r_config'] )
    config.logger = Log4r::Logger[Rails.env]
  end
end

步骤3。将此行添加到您的 Gemfile 中。

# which is the latest version and support "datefileoutputter"
gem 'log4r', '1.1.9'  

(如果您使用的是Rails 4+(包括Rails6),还有步骤4:将此文件添加到config/initializers文件夹中

# config/initializers/log4r_patch_for_rails4.rb
class Log4r::Logger
  def formatter()       # for rails4+
    Proc.new{|severity, time, progname, msg|
      formatted_severity = sprintf("%-5s",severity.to_s)
      formatted_time = time.strftime("%Y-%m-%d %H:%M:%S")
      "[#{formatted_severity} #{formatted_time} #{$$}]\n #{msg}\n"
    }

  end
  def formatter= temp   # for rails6+
  end
end  

)

完成。现在“cd”进入 Rails 应用程序文件夹,运行“bundle”安装 log4r,然后运行“rails s”, 您将在“/log”文件夹中找到日志文件,如下所示:

May  9 17:05 rails_2011-05-09.log
May 10 13:42 rails_2011-05-10.log

日志内容是(我最喜欢的格式):

$ tail log/rails_2011-05-10.log
Started GET "/????_settings/19/edit" for 127.0.0.1 at ...
13:42:11 INFO:   Processing by ????SettingsController ...
13:42:11 INFO:   Parameters: {"id"=>"19"}
13:42:12 DEBUG:   ????Setting Load (0.0ms)  SELECT "d ...
13:42:12 INFO: Completed 200 OK in 750ms

我的环境:

  1. 操作系统:cygwin 在 XP 中运行
  2. ruby 1.8.7 (2011-02-18 补丁级别 334) [i386-mingw32]
  3. 导轨:3.0.5
  4. 宝石:1.6.0

有任何问题请告诉我~:-)

参考:https://stackoverflow.com/a/20154414/445908 https://stackoverflow.com/a/20154414/445908 ,and Rails6 log4r tagged_logging.rb:22:in `call': 参数数量错误 https://stackoverflow.com/questions/63666807/rails6-log4r-tagged-logging-rb22in-call-wrong-number-of-arguments

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Rails 3.0.x 配置 Log4r? 的相关文章

随机推荐

  • 从 UIImage 转换为 SwiftUI Image 会产生相同大小的空白图像

    我正在尝试转换UIImage https developer apple com documentation uikit uiimage到 SwiftUIImage https developer apple com documentati
  • Javascript 即时创建

    我有一个与此类似的链接 a href home category blog 1 Blog a 如您所见 该链接的 ID 为 博客 我想要做的是使用所单击的链接中的 ID 动态创建一个 div 因此如果单击 博客 则标记将为 div div
  • Identity Server 4 无限循环

    我正在开发一个 asp net core 2 1 项目 其中安装了身份服务器 4 用户使用实体框架存储在 SQL 数据库中 Web 项目有一个登录页面和登录成功后的仪表板 请在 Startup cs 中找到以下代码 public class
  • 如何将图像从 Parse 加载到 UIImageView (iOS)

    我可能会问一些非常简单的问题 但我无法找到对我有帮助的教程或示例 我已经学会了如何从 Parse 检索字符串数据 现在我正在尝试检索图像 认为这会更容易 但我无法弄清楚 我正在尝试加载 1 张图像 我每天都会更改 UIImageView 从
  • Firebase - 'pushWithPriority' - 和验证

    我真的很想 优先推动 但这不存在 所以我计划进行不带参数的推送 然后使用返回的引用进行 setWithPriority 与文档中的示例类似 var messageListRef new Firebase https samplechat f
  • 可以在没有模拟器的情况下运行 Azure 缓存预览版吗?

    我们在应用程序中使用一些 Azure 特定功能 主要是 Blob 存储 借助 Blob 存储 我们弄清楚了如何在不需要运行缓慢的 Azure 模拟器的情况下运行它 我们现在正在试验 Azure 缓存预览版 它做了一些非常酷的事情 并且可以帮
  • 无法在同一类 JS 的另一个方法中调用方法

    我试图在同一类的方法 connect 中调用方法 test 但我得到的只是 未捕获类型错误 无法读取未定义的属性 测试 如何访问 sftp 回调内的任何变量 为什么会这样呢 这是我的代码 const SSH2 require ssh2 Cl
  • 在 Iphone SDK 中更改 Web 视图的字体大小

    我已经实现了提要解析并以字符串形式获取内容 现在 我正在通过它以编程方式制作 html 文件 在 Web 视图中加载该 HTML 我的网络视图是表视图单元格中的子视图 但现在我想更改网页视图内容的字体大小 以便用户可以看到一些细节 我的 H
  • 文件上传网站上应该避免使用“坏”文件扩展名?

    我正在重写一个文件托管站点 并且我希望能够托管每种文件类型 而不是仅仅拥有允许扩展名的 while 列表 我正在运行 nginx 和 linux 网站是用 php 构建的 我会禁用 php 文件的上传 但除此之外 还有什么我应该注意的吗 以
  • Springboot Wildfly 10部署错误jdk.unsupported module not found

    我有一个使用 Java 1 8 的 Spring Boot v2 项目 当我尝试在 Wildfly 10 上部署我的 Spring Boot 项目时 我不断收到此错误 19 12 25 295 ERROR org jboss as cont
  • 图像坐标到世界坐标opencv

    我使用 opencv 校准了我的单色相机 现在我知道相机的相机固有矩阵和畸变系数 K1 K2 P1 P2 K3 K4 K5 K6 假设相机位于 x y z 位置并进行 Roll Pitch Yaw 旋转 当相机看着地板 z 0 时 如何获取
  • 如何加速mysql中的Haversine公式?

    作为一个业余爱好项目 我开始为一家公司制作一个网站 我在为网站编写复杂代码方面不是很先进 但我想尝试一下 我有一个来自荷兰的邮政编码数据库 其中包含超过 471000 条记录 我使用半正矢公式查找 13 公里半径内有哪些邮政编码 然后从数据
  • Tweepy 速率限制/分页问题。

    我组装了一个小型 Twitter 工具来提取相关推文 以便稍后在潜在语义分析中进行分析 讽刺的是 这一点 更复杂的一点 工作得很好 问题在于拉动推文 我正在使用下面的代码来设置它 这在技术上是有效的 但没有达到预期 items 200 参数
  • AngularJS ui 路由器在没有 URL 的状态之间传递数据

    我面临着在两个状态之间传递数据而不暴露 url 中的数据的问题 就像用户无法真正直接登陆这个状态一样 例如 我有两个状态 A 和 B 我正在状态 A 进行一些服务器调用并传递调用的响应 陈述 B 服务器调用的响应是一条字符串消息 它很长 所
  • 在 ng-repeat 中加载背景图像时显示加载屏幕

    我已经加载了一个列表ng repeat其中每个元素包含一个img标签 我想显示某种加载指示器 包括列表项 直到每个项目中的每个图像都完成加载 我想我需要加入角度广播的一些事件back img指令 但我真的不知道从哪里开始 好的 所以我解决了
  • 为多对多关系的组合设计 SQL 模式(产品的变体)

    我希望标题能有点帮助 我使用 MySQL 作为我的数据库 我正在构建产品数据库 但不确定如何处理产品变体的存储价格 SKU 产品可能有无限的变体 并且每个变体组合都有自己的价格 SKU 等 这就是我目前设置产品 变体表的方式 PRODUCT
  • Java字符串初始化

    你更偏向于哪个 为什么 String myString null if someCondition myString something else myString something else OR String myString if
  • 假货组件未生成

    我不知道我需要做什么才能生成假货 在我的测试项目中 我包含了对我想要伪造的程序集的引用 它将 Fakes fakes 添加到我的项目中并构建了该项目 有大量警告 但错误数为 0 并且构建成功完成 但它没有添加对生成的 Fakes 程序集的任
  • BATCH - 移动超过 5 分钟的文件

    我想制作一个移动可执行文件 时间超过5分钟 不知道如何比较文件的修改日期与系统日期 echo off for f in log do move nf log Procesados exit 一种方法是下载查找工具 http gnuwin32
  • 如何使用 Rails 3.0.x 配置 Log4r?

    我尝试根据这篇文章使用Rails 3 0 4配置log4r http www dansketcher com 2007 06 16 integrating log4r and ruby on rails http www dansketch