【问题标题】:Error "undefined local variable or method `logger'" when using `logger.info` in a Sinatra application在 Sinatra 应用程序中使用 `logger.info` 时出现错误“未定义的局部变量或方法 `logger'”
【发布时间】:2016-04-05 18:14:00
【问题描述】:

我有以下 Sinatra 1.2.1 应用程序代码:

# app.rb
require 'sinatra'

get '/' do
  logger.info "COUCOU"
  'Hello world!'
end

并使用ruby -rubygems app.rb 启动服务器。当我转到http://localhost:4567 时,我得到了错误:

NameError at /
undefined local variable or method `logger' for #<Sinatra::Application:0x00000100d91f88>
file: app.rb location: block in <main> line: 4

我是否需要添加或配置某些内容才能在 Sinatra 中启用日志记录?阅读 Sinatra README 和文档,似乎默认情况下为 Sinatra::Application 启用了日志记录。

【问题讨论】:

    标签: ruby logging sinatra


    【解决方案1】:

    问题出在找不到write方法,这样扩展Logger类就可以了:

    class Logger
      # Make Rack::CommonLogger accept a Logger instance
      # without raising undefined method `write' for #<Logger:0x007fc12db61778>
      # makes a method alias using symbols
    
      alias :write :<<
    end
    

    【讨论】:

    • @tekknolagi 没有。别名不是一种方法。没有逗号。
    【解决方案2】:

    您可能缺少logger = Logger.new

    http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc/

    【讨论】:

    • 确实,谢谢!我的错误:我所指的 README 是针对 Sinatra 的 HEAD 版本,而不是 1.2.1 gem 版本。
    【解决方案3】:

    没有定义记录器,要克服它,你可以使用

    Rails.logger.info "COUCOU" 
    

    或者这样定义:

    logger = Rails.logger.new
    logger.info "COUCOU"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 2014-04-16
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多