ruby - 如何从 Sinatra 模型访问记录器?

标签 ruby logging sinatra

以下内容在请求的上下文中起作用:

get '/' do
  logger.info 'got /'
  ...

但是在模型中,

class Foo
  def bar
    logger.info 'bar'
    ...

Sinatra 抛出错误:NameError:main:Object 的未定义局部变量或方法“logger”

如何从模型内访问 Sinatra 记录器?

最佳答案

我相信 Sinatra 使用机架记录器。来自自述文件。 http://www.sinatrarb.com/intro.html#Logging

Sinatra will use whatever it will find in env['rack.logger'].

您可以使用 env['rack.logger'] 访问记录器。或者,您可以实现自己的应用程序记录器(与 Sinatra 分开),以便它单独保存您的 .log 以及您的设置(严重性级别、日志轮换等)。这是一个简单的示例。

module App
  extend self
  attr_accessor :log

  # init
  self.log = Logger.new('log/application.log', 10, 5242880)
  self.log.level = Logger::DEBUG  # could DEBUG, ERROR, FATAL, INFO, UNKNOWN, WARN

  self.log.formatter = proc { |severity, datetime, progname, msg|
                              "#{severity} :: #{datetime.strftime('%Y-%m-%d :: %H:%M:%S')} :: #{progname} :: #{msg}\n" 
end

然后在您的类(class)中,使用以下其中一项:

App.log.debug "some debug msg" 
App.log.info  "some info msg"
App.log.error "some error msg"

关于ruby - 如何从 Sinatra 模型访问记录器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14988042/

相关文章:

ruby - 如何用类似ARGV的方式将字符串解析成数组?

ruby-on-rails - 在 Rails 3 中向 Active Admin 添加全局导航项的最佳方法是什么

ruby - 在 Sinatra 中提供静态文件......有漂亮的路线?

ruby - 任务 create_release 时出现 Capistrano 部署错误

css - :eq pseudo selector not working with Selenium WebDriver/Chrome

ruby-on-rails - 在 View 中渲染 View

java - Hook 到 System.out.println();并修改

java - 如何在 WebSphere 上的 OSGi 企业应用程序中设置记录器?

java - 中断 shell 输出到文件

ruby - 如何进行真正简单的 Sinatra LDAP 身份验证?