首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails log4r和rabbitMQ自定义输出程序

Rails log4r和rabbitMQ自定义输出程序
EN

Stack Overflow用户
提问于 2013-06-24 14:43:58
回答 1查看 1.1K关注 0票数 1

我正在尝试创建一个使用消息队列远程记录的自定义输出程序.我在log4r项目中找到了一个输出,并试图修改它.但我糟透了..。因此,很可能有更好的方法来做到这一点。即:起作用的。;)

在这里,我使用修改的本地化器和写方法创建我的重复输出程序。

/lib/rabbit_outputter.rb

代码语言:javascript
复制
require 'log4r'
require 'bunny'

class RabbitOutputter < Log4r::Outputter
  attr_reader :host, :port
  attr_accessor :udpsock
  @exchange = "test1"

  def initialize(_name, hash={})
   super(_name, hash)

   bunny = Bunny.new
   bunny.start
   q = bunny.queue(@exchange)
   @e = bunny.exchange("")
   @e.publish("BOOSH!", :key => @exchange)
   #uncomment this later... b.stop

  end

  #######
  private
  #######

  def write(data)  
    @e.publish(data, :key => @exchange)
  end

end

然后,我将它混合到我的rails初始化器中。/config/initalizers/rabbit_outputter.rb

代码语言:javascript
复制
require "#{Rails.root}/lib/rabbit_outputter.rb"

然后,我在我的log4r文件中交换我的log4r.yaml记录器。

/config/log4r.yaml

代码语言:javascript
复制
log4r_config:
  loggers:
    - name : development
      level : DEBUG
      additive : 'false'
      trace : 'true'
      outputters:
      - rabbit_outputter
    - name : test
      level : DEBUG
      additive : 'false'
      trace : 'true'
      outputters:
      - rabbit_outputter
    - name : staging
      level : INFO
      additive : 'false'
      trace : 'true'
      outputters:
      - rabbit_outputter
    - name : production
      level : INFO
      additive : 'false'
      trace : 'true'
      outputters:
      - rabbit_outputter
  outputters:
    - type : RabbitOutputter
      name : rabbit_outputter
      level : INFO
      filename : <%= "#{Rails.root}/log/#{Rails.env}.log" %>
      formatter:
        date_pattern: '%Y-%m-%d %H:%M:%S %z'
        pattern : '{ \"date\":\"%d\", \"level\":\"%l\", \"appname\":\"MyApp\", \"event fullname\": \"%C\", \"global_diagnostic_context\":\"%g\",\"trace\":\"%t\", \"message\": %m }'
        type : PatternFormatter

下面是打开rails控制台时的错误:

代码语言:javascript
复制
rails c
/Users/<myusername>/.rvm/gems/ruby-1.9.3-p392/gems/log4r-1.1.10/lib/log4r/yamlconfigurator.rb:68:in `block in decode_yaml': 
Problem creating outputter: uninitialized constant Log4r::RabbitOutputter (Log4r::ConfigError)
EN

回答 1

Stack Overflow用户

发布于 2013-09-06 15:18:52

我也遇到了同样的问题,并且能够通过在我的application.rb语句之后将以下代码放在Bundler.require的顶部来解决这个问题:

代码语言:javascript
复制
require 'log4r'
require 'log4r/yamlconfigurator'
require "#{Rails.root}/lib/rollable_file_outputter.rb"
include Log4r

然后,在Application类块的底部添加以下内容并使用动态记录器:

代码语言:javascript
复制
# 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'] )
Server::Application::config.logger = Log4r::Logger[Rails.env]

然后,我可以在我的type: RollableFileOutputter文件中使用config/log4r.yml

我尝试将所有这些都放入一个初始化程序(config/initializers/logging.rb)中,但随后默认的记录器不是log4r,而是标准的rails记录器。我不太明白为什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17278311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档