晚上无意间翻到了@taojay315 的关于日志收集的帖子 (https://ruby-china.org/topics/27523),正好这段时间也在研究 知乎的 Kids
所以就借了@taojay315的思想和代码,根据自己的想法,写了一个 demo,见:https://github.com/zfjoy520/lograge_service_demo
写的一个即可以让 Rails 保持原生本机文件 LOG 不变, 又可以将 request / sql / exception 等日志发往 kids 的一个 demo.
其中,对 Rails 原生的丑日志的重新格式化部分抄自: concise_logging: https://github.com/gshaw/concise_logging
并有所修改。
下载 Kids 源码发布包(文件名为 kids-VERSION.tar.gz),运行:
tar xzf kids-VERSION.tar.gz
cd kids-VERSION
./configure
make && make install
$ kids -c lograge_service_demo/config/conf/kids_server.conf
2.3.0 :xxx > r = Redis.new(port: 3388)
2.3.0 :xxx > r.psubscribe('*') do |on|
2.3.0 :xxx > on.pmessage do |pattern, channel, message|
2.3.0 :xxx > puts "pattern: #{pattern}, channel: #{channel}, message: #{message}"
2.3.0 :xxx > end
2.3.0 :xxx > end
可以观察日志的收集情况
因为在 lib/lograge_service/railtie.rb 中指定了 development 环境不生效,所以需要以 production 来跑
$ puma -p 3000 -e production -t 32:32 -w 1
只需要在 config/application.rb 中引入 lib/lograge_service 即可:
# [config/application.rb]
...
require File.expand_path('../../lib/lograge_service', __FILE__)
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module LogrageServiceDemo
class Application < Rails::Application
...