如何将Logstash-logger宝石与Lograge,Rails 5 API或Ruby结合使用

时间:2018-08-14 12:58:46

标签: ruby-on-rails logstash rails-api

我尝试遵循两个自述文件:logrange gem和logstash-logger gem都没有成功。

第一次尝试是使用一个简单的Ruby文件:

require 'logstash-logger'

logger = LogStashLogger.new(
  type: :tcp,
  host: 'abcdxxtr',
  port: 3332,
  verify_hostname: false
)
logger.debug message: 'hello-draft', foo: 'bar'
logger.info 'hello-draft => test'

从终端以ruby logstash_logger.rb身份运行时,这是我得到的错误:

E, [2018-08-14T14:43:37.848226 #11853] ERROR -- : [LogStashLogger::Device::TCP] SocketError - getaddrinfo: nodename nor servname provided, or not known

与Rails API应用程序一起使用时,它似乎也没有发送任何东西。

  1. 我在Gemfile中添加了以下宝石:

group :development do gem 'lograge', '~> 0.10.0' gem 'logstash-event', '~> 1.2' gem 'logstash-logger', '~> 0.26.1' end

  1. config/environments/development.rb中添加了以下几行: config.lograge.enabled = true config.lograge.base_controller_class = 'ActionController::API' config.lograge.formatter = Lograge::Formatters::Logstash.new config.lograge.logger = LogStashLogger.new(uri: ENV['logstash_uri']) config.lograge.custom_options = lambda do |event| { name: "store-development" } end

这是怎么了?我已经尝试使用另一种语法来初始化LogStashLogger

config.lograge.logger = LogStashLogger.new(type: :tcp, host: ENV['logstash_host'], port: ENV['logstash_port'])

不幸的是,仍然没有成功。

1 个答案:

答案 0 :(得分:0)

使用类似的配置,我在某些Rails项目中遇到了类似的错误,而在其他项目中却没有:

type: :multi_delegator,
  outputs: [
    { type: :file, path: 'log/test.log' },
    { type: :udp, host: 'localhost', port: 5228 },
    { type: :io, io: io }
  ]
在测试环境中

可以将日志发送到多个位置。

原来是这个错误

getaddrinfo: nodename nor servname provided, or not known

是无法解析DNS时得到的。对我来说,那些没用的东西是由Sidekiq运行的,从localhost更改为127.0.0.1解决了这个问题。