我尝试根据本文使用Rails 3.0.4配置log4r: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'
Run Code Online (Sandbox Code Playgroud)
我已经谷歌搜索Rails 3集成,但还没有找到一个有效的解决方案.任何人都可以指向一个工作的代码片段,允许使用YAML文件进行日志配置,并在运行时初始化?
作为参考,我将示例logger.rb放在config/initializers文件夹中,将log4r.yml放在config目录中.
谢谢
在rails项目上配置日志功能的最佳方法是什么?我正在寻找Rails可用的Log4J之类的东西.我发现log4r并且它在Logger类中构建了冲突并且还尝试了"Logging"gem并且它在配置为审计记录器时存在一些问题.因为我是这个主题的初学者,请让我知道你对这个主题的建议.
我在logging.rb中使用了以下代码块并包含在environment.rb中但是我收到了'returns'关键字的错误,因为它在rails 2.8上已被弃用
# Logging
require File.join(File.dirname(__FILE__), 'logging')
Rails::Initializer.run do |config|
Run Code Online (Sandbox Code Playgroud)
require 'logging'
# Logging.init is required to avoid
# unknown level was given 'info' (ArgumentError)
# or
# uninitialized constant Logging::MAX_LEVEL_LENGTH (NameError)
# when an Appender or Layout is created BEFORE any Logger is instantiated:
Logging.init :debug, :info, :warn, :error, :fatal
layout = Logging::Layouts::Pattern.new :pattern => "[%d] [%-5l] %m\n"
# Default logfile, history kept for 10 days
default_appender = Logging::Appenders::RollingFile.new 'default', \
:filename => 'log/default.log', :age …
Run Code Online (Sandbox Code Playgroud) 我必须真的遗漏一些明显的东西,但是我在Ruby应用程序中普遍使用Log4r时遇到了麻烦.我可以毫无问题地登录,但开销似乎很笨拙我设置的方式.我基本上将完整路径传递给文件名以登录我的应用程序中的每个类.调用的ruby脚本从ARGV中的一个参数中提取日志文件,然后传递给我并在我在ruby中调用的每个类中设置.在每个类中,我使用patternFormatter将类/文件名插入到日志语句中.
有没有更好的方法来使这项工作?感觉就像我想的那样需要将某些东西传递给我的ruby应用程序中的每个类.我可以在yaml配置文件中设置日志文件,但是我也会将配置文件传递给每个类.
有什么建议?如果这没有意义,我可以尝试发布一些更具体的代码示例,以进一步解释我的意思.
谢谢!
我一直在研究这个话题已经太久了,所以我必须发布这个.我有几个应用程序运行此设置,其中一个完全borks在rails启动(rails s).它们的配置几乎完全相同,但我似乎无法在大海捞针中找到它.有没有人对如何找到这个问题有任何指示?
设置基于:http://blog.mmlac.com/log4r-for-rails/comment-page-1/#comment-1731
当我尝试运行rails s时:
=> Booting WEBrick
=> Rails 4.0.0 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Exiting
/Users/chrishough/Placewise/code/ApiDigest/.bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/commands/server.rb:78:in `start': undefined method `formatter' for #<Log4r::Logger:0x007f85be89abe8> (NoMethodError)
from /Users/chrishough/Placewise/code/ApiDigest/.bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:78:in `block in <top (required)>'
from /Users/chrishough/Placewise/code/ApiDigest/.bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:73:in `tap'
from /Users/chrishough/Placewise/code/ApiDigest/.bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:73:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
Run Code Online (Sandbox Code Playgroud)
我如何在application.rb文件中配置log4r:
#log4r requirements
require 'log4r'
require 'log4r/yamlconfigurator'
require 'log4r/outputter/datefileoutputter'
include Log4r
module DigestApi
class Application < Rails::Application
# …
Run Code Online (Sandbox Code Playgroud) 将Rails从3.1.2升级到4.0后,我收到此错误.当使用rails启动我的服务器时,我遇到了以下错误
C:/ruby-2.0.0/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands/server.rb:78:in `start': undefined method `formatter' for #<Log4r::Logger:0x26dd908> (NoMethodError)
Run Code Online (Sandbox Code Playgroud)
我一直在Log4r网站上,但没有任何信息;有关升级Rails时的错误.
有没有人知道这个bug来自哪里.谢谢!
我正在使用Sidekiq在我的Rails服务器中排队一些工作.根据Logging wiki,它就像在config/sidekiq.yml中添加以下内容一样简单
---
:verbose: false
:pidfile: ./tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log
:concurrency: 25
Run Code Online (Sandbox Code Playgroud)
但是,现在这只记录到该日志文件,如果我也想写出STDOUT(至少在开发中)怎么办?
我有一个应用程序,我想测试我是否从记录器中获得正确的消息.
一个简短的例子(你可以在log4r和logger之间切换):
gem 'minitest'
require 'minitest/autorun'
require 'log4r'
#~ require 'logger'
class Testlog < MiniTest::Test
def setup
if defined? Log4r
@log = Log4r::Logger.new('log')
@log.outputters << Log4r::StdoutOutputter.new('stdout', :level => Log4r::INFO)
else
@log = Logger.new(STDOUT)
@log.level = Logger::INFO
end
end
def test_silent
assert_silent{ @log.debug("hello world") }
assert_output(nil,nil){ @log.debug("Hello World") }
end
def test_output
#~ refute_silent{ @log.INFO("Hello") }#-> NoMethodError: undefined method `refute_silent'
assert_output("INFO log: Hello World\n",''){ @log.info("Hello World") }
end
end
Run Code Online (Sandbox Code Playgroud)
但我得到:
1) Failure:
Testlog#test_output [minitest_log4r.rb:27]:
In stdout.
Expected: "INFO log: Hello World\n" …
Run Code Online (Sandbox Code Playgroud) 有人可以发布一个使用syslog输出器为log4r的例子,我目前正在使用stdout但是想要登录到syslog.
mylog = Logger.new 'mylog'
mylog.outputters = Outputter.stdout
mylog.info "Starting up."
Run Code Online (Sandbox Code Playgroud)
拉吉
还要感谢以下博文.
我想在日志输出中包含调用记录器的类的名称,例如:
[MyClass] here is the message
Run Code Online (Sandbox Code Playgroud)
我已经看到了使用上下文的选项,但是当我记录内容时,我不希望在我的应用程序中做这样的事情(请记住,我希望每条日志消息中都有类名):
NDC.push('class:' + self.class.name)
logger.debug 'hello'
Run Code Online (Sandbox Code Playgroud)
我想打个电话:
logger.debug 'hello'
Run Code Online (Sandbox Code Playgroud)
有什么建议?
log4r
在Ruby中使用时,我编写了一个类似于以下内容的配置文件:
require 'rubygems'
require 'log4r'
require 'log4r/outputter/datefileoutputter'
SERVICE_LOG = {
:log_name => 'service',
:log_file => 'service.log',
:log_level => Log4r::DEBUG,
:message_pattern => "[%-5l %d] %C: %M",
:date_pattern => "%Y-%m-%d %H:%M:%S"
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它抛出了以下异常:
C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:440:in `load_missing_constant': uninitialized constant Log4r::DEBUG (NameError)
Run Code Online (Sandbox Code Playgroud)
为什么这样做?