スポンサーサイト

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

MongoDBにアクセスログを取るRack Middleware

SinatraでMongoDBにアクセスログを保存しようと思ってぐぐってみても見つからなかったので自作しました。
上のソースが本体で下のソースが呼び出しているところです。
excludesはログに残したくないパラメーターを記述します。例えばpasswordなどです。
#coding: utf-8
require 'rack'

module Rack
class AccessLog
def initialize(app, opts = {})
@app = app
@collection = opts[:collection] ? opts[:collection] : Mongo::Connection.new()['test']['access']
@excludes = opts[:excludes] ? opts[:excludes] : []
@mask = opts[:mask] ? opts[:mask] : 'xxx'
@safe = opts[:safe] ? opts[:safe] : false
end

def call(env)
req = Rack::Request.new(env)
p = req.params()
@excludes.each do |it|
if p[it]
p[it] = @mask
end
end
params = {
ip: req.ip(),
uri: req.path(),
ua: req.user_agent(),
p: p,
ins: Time.now
};
@collection.insert(params, {safe: @safe})
res = @app.call(env)
res
end
end
end

conn = Mongo::Connection.new('localhost', 27017)
use Rack::AccessLog, {
collection: conn['test']['access'],
safe: true,
excludes: ['password']
}
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


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

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