标签: log4r

Ruby的stdlib Logger类是线程安全的吗?

简而言之,Ruby中的标准库Logger类是否是线程安全的?只有谷歌出现的有用信息才是论坛上有人说它"似乎"是线程安全的.而且我不想花时间测试记录器来试图弄清楚它是否存在.

暂时我使用的是log4r,它是线程安全的,但是如果标准库已经完成它就太过分了.

ruby logging multithreading log4r thread-safety

29
推荐指数
1
解决办法
5039
查看次数

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

我尝试根据本文使用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目录中.

谢谢

ruby-on-rails log4r ruby-on-rails-3

16
推荐指数
1
解决办法
8893
查看次数

什么是最好的Rails Logging Gem

在rails项目上配置日志功能的最佳方法是什么?我正在寻找Rails可用的Log4J之类的东西.我发现log4r并且它在Logger类中构建了冲突并且还尝试了"Logging"gem并且它在配置为审计记录器时存在一些问题.因为我是这个主题的初学者,请让我知道你对这个主题的建议.

我在logging.rb中使用了以下代码块并包含在environment.rb中但是我收到了'returns'关键字的错误,因为它在rails 2.8上已被弃用

到config/environment.rb

# Logging
require File.join(File.dirname(__FILE__), 'logging')

Rails::Initializer.run do |config|
Run Code Online (Sandbox Code Playgroud)

配置/ logging.rb

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)

logging log4j ruby-on-rails log4r

10
推荐指数
1
解决办法
1万
查看次数

在Ruby Application中正确使用Log4r

我必须真的遗漏一些明显的东西,但是我在Ruby应用程序中普遍使用Log4r时遇到了麻烦.我可以毫无问题地登录,但开销似乎很笨拙我设置的方式.我基本上将完整路径传递给文件名以登录我的应用程序中的每个类.调用的ruby脚本从ARGV中的一个参数中提取日志文件,然后传递给我并在我在ruby中调用的每个类中设置.在每个类中,我使用patternFormatter将类/文件名插入到日志语句中.

有没有更好的方法来使这项工作?感觉就像我想的那样需要将某些东西传递给我的ruby应用程序中的每个类.我可以在yaml配置文件中设置日志文件,但是我也会将配置文件传递给每个类.

有什么建议?如果这没有意义,我可以尝试发布一些更具体的代码示例,以进一步解释我的意思.

谢谢!

ruby logging log4r

7
推荐指数
2
解决办法
8570
查看次数

rails 4 log4r server.rb:78:在`start'中:未定义的方法`formatter'

我一直在研究这个话题已经太久了,所以我必须发布这个.我有几个应用程序运行此设置,其中一个完全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)

ruby log4r ruby-on-rails-4

6
推荐指数
2
解决办法
2513
查看次数

RAILS 4.0中Log4r的未定义方法格式化程序

将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来自哪里.谢谢!

ruby log4r ruby-on-rails-4

5
推荐指数
1
解决办法
2895
查看次数

Sidekiq记录到终端和日志文件

我正在使用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 sidekiq ruby-on-rails-4

5
推荐指数
1
解决办法
1万
查看次数

如何使用MiniTest测试记录器消息?

我有一个应用程序,我想测试我是否从记录器中获得正确的消息.

一个简短的例子(你可以在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)

ruby logging unit-testing log4r minitest

5
推荐指数
1
解决办法
1661
查看次数

log4r示例的syslog输出

有人可以发布一个使用syslog输出器为log4r的例子,我目前正在使用stdout但是想要登录到syslog.

mylog = Logger.new 'mylog'
mylog.outputters = Outputter.stdout
mylog.info "Starting up."
Run Code Online (Sandbox Code Playgroud)

拉吉


还要感谢以下博文.

Angrez的博客:Log4r - 用法和示例

ProgrammingStuff:Log4r

ruby log4r

3
推荐指数
1
解决办法
3576
查看次数

Log4r - 在日志输出中包含类名

我想在日志输出中包含调用记录器的类的名称,例如:

[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)

有什么建议?

ruby log4r

3
推荐指数
1
解决办法
2097
查看次数

Ruby:未初始化的常量Log4r :: DEBUG(NameError)问题

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)

为什么这样做?

ruby log4r

3
推荐指数
1
解决办法
2517
查看次数