概要
Sinatra アプリのロギングに fluent-logger を使ってみました
CustomLogger を使うだけなので簡単にできます
環境
- macOS 10.15.7
- Ruby 2.7.1p83
- fluent-logger 0.9.0
- sinatra 2.0.7
通常のロギング
まず通常のロギング方法です
logger を require して使うだけなので簡単です
require 'sinatra/base'
require 'logger'
class MyApp < Sinatra::Base
configure do
logger = Logger.new(STDOUT)
logger.level = Logger::DEBUG
set :logger, logger
end
get '/test' do
logger.info 'ok'
'ok'
end
end
CustomLogger
を使う
次に CustomLogger
を使って fluent-logger を設定してみます
level と info というメソッドが fluent-logger にはありません
level は削除し info は post というメソッドに置き換えます
また post メソッドはタグ情報+ハッシュでロギングするようにします
require 'sinatra/base'
require 'logger'
require 'fluent-logger'
require 'sinatra/custom_logger'
class MyApp < Sinatra::Base
helpers Sinatra::CustomLogger
configure do
logger = Fluent::Logger::FluentLogger.new(nil, :host => 'localhost', :port => 24224)
set :logger, logger
end
get '/test' do
logger.post('myapp.access', {'msg' => 'ok'})
'ok'
end
end
動作確認
受け取り側の fluentd を起動します
今回は docker で起動します
vim fluent.conf
<source>
@type forward
</source>
<match *.*>
@type stdout
</match>
docker run --name fluentd -d -v $(pwd)/fluent.conf:/fluentd/etc/fluent.conf -p 24224:24224 fluentd -c /fluentd/etc/fluent.conf
ログが表示されるか準備しておきます
docker logs -f fluentd
あとはアプリを起動してエンドポイントにアクセスします
bundle exec rackup config.ru
curl localhost:9292/test
ちゃんとアプリのログが fluentd 側に転送されているのが確認できると思います
最後に
Sinatra の Custom::Logger
を使ってロガーを fluent-logger にしてみました
特定のログだけ直接 fluentd に飛ばすこともできるかなと思います
ちなみに Sinatra のデフォルトの logger はすべて標準エラーに吐かれるので logger.info
を標準出力に出したい場合は CustomLogger を使うのが必須になります
0 件のコメント:
コメントを投稿