スポンサーサイト

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

rubyでMongoDBのloggerを作る

SinatraでMongoDBにアプリケーションログを保存しようと思ったら、ライブラリがなかった
rails用ならいくつもあるんですけど、普通にログを取るだけのものが無いんですよ。
ということで、自作。
サンプルはSinatraからコールすることを想定しています。

#coding: utf-8
require 'logger'

class MongoLogger
DEFAULT_LEVEL = Logger::Severity::INFO

def initialize(opts={})
@level = opts[:level] ? opts[:level] : MongoLogger::DEFAULT_LEVEL
@collection = opts[:collection] ? opts[:collection] : nil
@safe = opts[:safe] ? opts[:safe] : false
end

def log(level, msg=nil, &block)
return true if level < @level
msg = yield if block_given?
@collection.insert({i: Time.now, l: level, m: msg}, {safe: @safe})
true
end

def fatal(msg=nil, &block)
log(Logger::Severity::FATAL, msg, &block)
end

def error(msg=nil, &block)
log(Logger::Severity::ERROR, msg, &block)
end

def warn(msg=nil, &block)
log(Logger::Severity::WARN, msg, &block)
end

def info(msg=nil, &block)
log(Logger::Severity::INFO, msg, &block)
end

def debug(msg=nil, &block)
log(Logger::Severity::DEBUG, msg, &block)
end
end


configure do
conn = Mongo::Connection.new('localhost', 27017)
set :logger, MongoLogger.new({collection: conn['test']['syslog']})
end

def logger
settings.logger
end

get '/' do
logger.info('abc')
'Hello World'
end
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


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

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