lib/logsly.rb in logsly-1.0.2 vs lib/logsly.rb in logsly-1.1.0

- old
+ new

@@ -1,19 +1,57 @@ require 'ns-options' require 'logging' require 'logsly/version' -require 'logsly/settings' +require 'logsly/colors' +require 'logsly/base_output' module Logsly def self.included(receiver) receiver.class_eval do attr_reader :log_type, :level, :outputs, :logger include LoggerMethods end end + module Settings + include NsOptions::Proxy + + option :colors, ::Hash, :default => ::Hash.new(NullColors.new) + option :outputs, ::Hash, :default => ::Hash.new(NullOutput.new) + end + + def self.reset + Settings.reset + Logging.reset + end + + def self.colors(name, &block) + require 'logsly/colors' + Settings.colors[name.to_s] = Colors.new(name, &block) if !block.nil? + Settings.colors[name.to_s] + end + + def self.stdout(name, &block) + require 'logsly/stdout_output' + Settings.outputs[name.to_s] = StdoutOutput.new(&block) + end + + def self.file(name, &block) + require 'logsly/file_output' + Settings.outputs[name.to_s] = FileOutput.new(&block) + end + + def self.syslog(name, &block) + require 'logsly/syslog_output' + Settings.outputs[name.to_s] = SyslogOutput.new(&block) + end + + def self.outputs(name) + Settings.outputs[name.to_s] + end + module LoggerMethods def initialize(log_type, opts_hash=nil) opts = NsOptions::Struct.new(opts_hash) do option :level, String, :default => 'info' @@ -28,10 +66,20 @@ @outputs.each do |output| add_appender(Logsly.outputs(output).to_appender(self)) end end + def mdc(key, value) + Logging.mdc[key] = value + end + + def file_path + @file_path ||= if (appender = get_file_appender) + appender.name if appender.respond_to?(:name) + end + end + # delegate all calls to the @logger def method_missing(method, *args, &block) @logger.send(method, *args, &block) end @@ -61,9 +109,13 @@ def appender_added?(appender) @logger.appenders.detect do |existing| existing.kind_of?(appender.class) && existing.name == appender.name end + end + + def get_file_appender + @logger.appenders.detect{ |a| a.kind_of?(Logging::Appenders::File) } end end end