How to add a custom log level to logger in ruby?

后端 未结 6 388

I need to add a custom log level like \"verbose\" or \"traffic\" to ruby logger, how to do?

相关标签:
6条回答
  • 2021-01-11 15:48

    If you start needing a bunch of custom stuff, it may be worth checking out log4r, which is a flexible logging library that lets you do a bunch of interesting/useful stuff easily.

    0 讨论(0)
  • 2021-01-11 15:48

    This is an old question, but since it comes up so high on google, I figured it'd be useful to have to correct answer. You can actually use the Logging.init method. Here's how you would add a trace log level

    require 'logging'
    Logging.init %w(trace debug info warn error fatal)
    Logging.logger.root.level = :trace
    Logging.logger.root.add_appenders Logging.appenders.stdout
    Logging.logger['hello'].trace 'TEST'
    

    This is using the 2.0.0 of the logging gem.

    0 讨论(0)
  • 2021-01-11 16:01

    Log levels are nothing but integer constants defined in logger.rb:

    # Logging severity.
    module Severity
      DEBUG = 0
      INFO = 1
      WARN = 2
      ERROR = 3
      FATAL = 4
      UNKNOWN = 5
    end
    

    You can log messages with any level you like using Logger#add method:

    l.add 6, 'asd'
    #=> A, [2010-02-17T16:25:47.763708 #14962]   ANY -- : asd
    
    0 讨论(0)
  • 2021-01-11 16:05

    You can create your own logger by overloading the Logger class

    0 讨论(0)
  • 2021-01-11 16:06

    Your own logger just need to overwrite the Logger#format_severity method, something like this :

    class MyLogger < Logger
    
      SEVS = %w(DEBUG INFO WARN ERROR FATAL VERBOSE TRAFFIC)
      def format_severity(severity)
        SEVS[severity] || 'ANY'
      end
    
      def verbose(progname = nil, &block)
        add(5, nil, progname, &block)
      end
    end
    
    0 讨论(0)
  • 2021-01-11 16:07

    You can simply add to the Logger class:

    require 'logger'
    
    class Logger
      def self.custom_level(tag)
        SEV_LABEL << tag 
        idx = SEV_LABEL.size - 1 
    
        define_method(tag.downcase.gsub(/\W+/, '_').to_sym) do |progname, &block|
          add(idx, nil, progname, &block)
        end 
      end 
    
      # now add levels like this:
    
      custom_level 'TRAFFIC'
      custom_level 'ANOTHER-TAG'
    end
    
    
    # using it:
    
    log = Logger.new($stdout)
    log.traffic('testing')
    log.another_tag('another message here.')
    
    0 讨论(0)
提交回复
热议问题