Class Index [+]

Quicksearch
# Пример использования CLS форматирования для оформления сообщений
# лога в CLS-синтаксис.
#
# Используется формат:
#   {<severity> {timestamp <TimeXmlSchema>} {program <str>} {message <str>}}
#
# Где <severity> -- это debug/info/warn/error/fatal/any
#

require 'logger'

require 'cls-ruby'
require 'cls-ruby/tag_no_value'
require 'cls-ruby/tag_scalar'
require 'cls-ruby/oneline_formatter'

module LogSingleLineFormatter

# Класс форматера, который сможет использоваться совместно с Logger.
#
class Formatter

  def call( severity, time, progname, msg )
    r = ''
    TagSeverity.new( severity, time, progname, msg2str(msg) ).tag_format(
        ClsRuby::OneLineFormatter.new( r ) )
    r << "\n"
  end

private
  # Этот метод взят из реализации стандартного Formatter из
  # реализации Logger в стандартной библиотеке Ruby.
  def msg2str( msg )
    case msg
    when ::String
      msg
    when ::Exception
      "#{ msg.message } (#{ msg.class })\n" <<
        (msg.backtrace || []).join("\n")
    else
      msg.inspect
    end
  end

  # Класс тега severity.
  class TagSeverity < ClsRuby::TagNoValue
    mandatory_child_tag :timestamp, ClsRuby::TagScalar,
        :format => ClsRuby::TimeXmlSchemaScalarParser.new

    mandatory_child_tag :program, ClsRuby::TagStringScalar

    mandatory_child_tag :message, ClsRuby::TagStringScalar

    def initialize( severity, time, progname, msg )
      super( :name => severity.downcase )

      @timestamp.value = time
      @program.value = progname || 'UNKNOWN'
      @message.value = msg

      # Указываем, что тег определен, в противном случае он
      # не будет форматироваться.
      tag_make_defined
    end
  end
end

end # module LogSingleLineFormatter

log = Logger.new( STDOUT )
log.progname = $0
log.formatter = LogSingleLineFormatter::Formatter.new

log.debug( 'This is a debug message' )
log.info( 'This is an info message' )
log.warn( 'This is a warning message' )
log.error( 'This is an error message' )
log.fatal( 'This is a fatal message' )

# vim:ts=2:sts=2:sw=2:expandtab:ft=txt:tw=78

[Validate]

Generated with the Darkfish Rdoc Generator 2.