class MongoidLogger::Base
Attributes
mongo_collection_names[R]
Public Class Methods
collection_names()
click to toggle source
# File lib/mongoid_logger/base.rb, line 8 def collection_names @collection_names ||= [] end
new(path, options={})
click to toggle source
Calls superclass method
# File lib/mongoid_logger/base.rb, line 13 def initialize(path, options={}) @path = path @level = options[:level] || DEBUG configure(options) super(@path, @level) end
Public Instance Methods
add(severity, message=nil, progname=nil, &blk)
click to toggle source
Calls superclass method
# File lib/mongoid_logger/base.rb, line 20 def add(severity, message=nil, progname=nil, &blk) if @level <= severity and message.present? and @record.present? @record[:messages] ||= [] @record[:messages] << [severity, message] end super end
add_metadata(options={})
click to toggle source
# File lib/mongoid_logger/base.rb, line 28 def add_metadata(options={}) if @record options.each_pair do |key, value| @record[key] = value end end end
confirm_collection()
click to toggle source
# File lib/mongoid_logger/base.rb, line 73 def confirm_collection mongo_collection_name_array.each do |name| unless @session.collections.find{|col| col.name == name } create_collection(name) end end end
create_collection(name)
click to toggle source
# File lib/mongoid_logger/base.rb, line 63 def create_collection(name) @session.command(create: name, capped: true, size: @db_configuration["capsize"] || 64.megabyte) rescue Exception => e if e.message =~ /collection already exists/ internal_log(:warn, "Ignore #{name} creation failure. See following message of #{e.class.name}:\n" << e.message) else raise e end end
enable_mongoid_logging(controller, options={}) { || ... }
click to toggle source
# File lib/mongoid_logger/base.rb, line 36 def enable_mongoid_logging(controller, options={}) @record = options.merge({ :messages => [], :request_time => Time.now.getutc, :application_name => @application_name, :host => Socket.gethostname, :pid => Process.pid, }) st = Time.now yield ed = Time.now @record["runtime"] = (ed - st).to_f @record["status"] = controller ? controller.response.status : 200 rescue Exception if st @record["runtime"] = (Time.now - st).to_f end @record["status"] = 500 add(3, $!.message + "\n " + $!.backtrace.join("\n ")) #rescue nil raise ensure begin insert_document(@record) rescue end end
mongo_collection_name_array()
click to toggle source
# File lib/mongoid_logger/base.rb, line 90 def mongo_collection_name_array (@mongo_collection_names.values + [@mongo_collection_names.default]).compact.uniq end
reset_collection()
click to toggle source
# File lib/mongoid_logger/base.rb, line 81 def reset_collection mongo_collection_name_array.each do |name| @session.command(drop: name) create_collection(name) end end
Private Instance Methods
configure(options={})
click to toggle source
# File lib/mongoid_logger/base.rb, line 96 def configure(options={}) @db_configuration = { "capsize" => 512.megabytes, }.merge(resolve_config) base_name = options[:collection_name] || @db_configuration["log_collection"] @mongo_collection_names = (options[:isolated_methods] || []).each_with_object({}){|name,d | d[name] = base_name.sub(/_logs\Z/){ "_#{name}_logs" } } @mongo_collection_names.default = base_name @application_name = @db_configuration["application_name"] @session = mongoid_session confirm_collection @mongo_collections = @mongo_collection_names.each_with_object({}){|(k, col_name), d| d[k] = @session[col_name] } @mongo_collections.default = @session[ @mongo_collection_names.default ] @ignore_block = options[:ignore] end
insert_document(doc)
click to toggle source
# File lib/mongoid_logger/base.rb, line 126 def insert_document(doc) doc[:level] = doc[:messages].map(&:first).min || 0 return if @ignore_block && @ignore_block.call(doc) col = @mongo_collections[ doc[:request_method].downcase.to_sym ] col.insert(doc) end
internal_log(log_level, msg)
click to toggle source
# File lib/mongoid_logger/base.rb, line 133 def internal_log(log_level, msg) $stderr.puts("#{log_level} #{msg}") end
mongoid_session()
click to toggle source
# File lib/mongoid_logger/base.rb, line 118 def mongoid_session if session_name = @db_configuration["session"] Mongoid.session(session_name) else Mongoid.default_session end end
resolve_config()
click to toggle source
# File lib/mongoid_logger/base.rb, line 114 def resolve_config {} end