class Logging::Layouts::EvenOddPattern
Constants
- DIRECTIVE_TABLE
Public Class Methods
create_format_method( pf )
click to toggle source
# File lib/logging/layouts/odd_even_pattern.rb, line 126 def self.create_format_method( pf ) spf_bag=SprintfBag.new(pf.color_scheme,COLOR_ALIAS_TABLE,DIRECTIVE_TABLE) pattern=pf.pattern.dup while true m = DIRECTIVE_RGXP.match(pattern) # * $1 is the stuff before directive or "" if not applicable # * $2 is the %#.# match within directive group # * $3 is the directive letter # * $4 is the precision specifier for the logger name # * $5 is the stuff after the directive or "" if not applicable spf_bag << m[1] unless m[1].empty? case m[3] when '%'; spf_bag << '%%' when 'c' spf_bag.add_colored(m[2]+'s',m[3]) if m[4] precision = Integer(m[4]) rescue nil if precision raise ArgumentError, "logger name precision must be an integer greater than zero: #{precision}" unless precision > 0 spf_bag.add_arg(".split(::Logging::Repository::PATH_DELIMITER).last(#{m[4]}).join(::Logging::Repository::PATH_DELIMITER)",true) else spf_bag << "{#{m[4]}}" end end when 'l' #level is dynamic if pf.color_scheme and pf.color_scheme.levels? name_map = ::Logging::LNAMES.map { |name| pf.color_scheme.color(("#{m[2]}s" % name), name) } name_bright_map = ::Logging::LNAMES.map { |name| pf.color_scheme.color(("#{m[2]}s" % name), "#{name}_bright") } the_map={0 => name_map, 1 => name_bright_map} spf_bag.add_variable(the_map,"@var[event.odd_even][event.level]") << '%s' spf_bag << "{#{m[4]}}" if m[4] else spf_bag << m[2] + 's' spf_bag << "{#{m[4]}}" if m[4] spf_bag.add_arg(DIRECTIVE_TABLE[m[3]]) end when 'X' raise ArgumentError, "MDC must have a key reference" unless m[4] spf_bag.add_colored(m[2] + 's',m[3], m[4]) when 'x' separator = m[4].to_s separator = ' ' if separator.empty? spf_bag.add_colored(m[2] + 's',m[3], separator) when *DIRECTIVE_TABLE.keys spf_bag.add_colored(m[2] + 's',m[3]) spf_bag << "{#{m[4]}}" if m[4] when nil; break else raise ArgumentError, "illegal format character - '#{m[3]}'" end break if m[5].empty? pattern = m[5] end sprintf= code = "undef :format if method_defined? :format\n" code << "def format( event ) if event.even? #{spf_bag.to_sprintf} else #{spf_bag.to_sprintf(true)} end end" ::Logging.log_internal(0) {code} spf_bag.set_variables(pf) pf._meta_eval(code, __FILE__, __LINE__) end
new( opts = {} )
click to toggle source
# File lib/logging/layouts/odd_even_pattern.rb, line 10 def initialize( opts = {} ) @created_at = Time.now @date_pattern = opts.getopt(:date_pattern) @date_method = opts.getopt(:date_method) @date_pattern = ISO8601 if @date_pattern.nil? and @date_method.nil? @pattern = opts.getopt(:pattern, "[%d] %-#{::Logging::MAX_LEVEL_LENGTH}l -- %c : %m\n") cs_name = opts.getopt(:color_scheme) @color_scheme = case cs_name when false, nil; nil when true; ::Logging::ColorScheme[:default] else ::Logging::ColorScheme[cs_name] end self.class.create_date_format_methods(self) self.class.create_format_method(self) end