スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

fluentdにアクセスログを取るRackミドルウェア

ソース。
#coding: utf-8
require 'rack'
require 'fluent-logger'

module Rack
class FluentAccessLog
def initialize(app, opts = {})
@app = app
@excludes = opts[:excludes] ? opts[:excludes] : []
@mask = opts[:mask] ? opts[:mask] : 'xxx'
@tag = opts[:tag] ? opts[:tag] : 'accesslog'
host = opts[:host] ? opts[:host] : 'localhost'
port = opts[:port] ? opts[:port].to_i : 24224
Fluent::Logger::FluentLogger.open(nil, host: host, port: port)
end

def call(env)
req = Rack::Request.new(env)
p = req.params()
@excludes.each do |it|
if p[it]
p[it] = @mask
end
end
Fluent::Logger.post(@tag, {
i: req.ip(),
u: req.path(),
a: req.user_agent(),
p: p,
})
res = @app.call(env)
res
end
end
end

使い方

use Rack::FluentAccessLog, {
tag: 'mongo.cms_accesslog',
excludes: ['password']
}
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。