lib/semantic_logger/appender/graylog.rb in semantic_logger-3.2.1 vs lib/semantic_logger/appender/graylog.rb in semantic_logger-3.3.0

- old
+ new

@@ -16,11 +16,11 @@ # Notes: # * trace is not supported by Graylog, so trace level logging will appear as debug in Graylog. # # In the Graylog Web UI search screen, it is recommended to include the following fields: # `duration`, `level`, `message`, `metric`, `name`, `tags -class SemanticLogger::Appender::Graylog < SemanticLogger::Appender::Base +class SemanticLogger::Appender::Graylog < SemanticLogger::Subscriber # Map Semantic Logger levels to Graylog levels LEVEL_MAP = { fatal: GELF::FATAL, error: GELF::ERROR, warn: GELF::WARN, @@ -40,18 +40,10 @@ # 'udp://localhost:12201' # Log to TCP Example: # 'tcp://localhost:12201' # Default: 'udp://localhost:12201' # - # host: [String] - # Name of this host to appear in log messages. - # Default: Socket.gethostname - # - # application: [String] - # Name of this application to appear in log messages. - # Default: SemanticLogger.application - # # max_size: [String] # Max udp packet size. Ignored when protocol is :tcp # Default: "WAN" # # level: [:trace | :debug | :info | :warn | :error | :fatal] @@ -66,43 +58,48 @@ # filter: [Regexp|Proc] # RegExp: Only include log messages where the class name matches the supplied. # regular expression. All other messages will be ignored. # Proc: Only include log messages where the supplied Proc returns true # The Proc must return true or false. + # + # host: [String] + # Name of this host to appear in log messages. + # Default: SemanticLogger.host + # + # application: [String] + # Name of this application to appear in log messages. + # Default: SemanticLogger.application def initialize(options = {}, &block) - @gelf_options = options.dup - @url = @gelf_options.delete(:url) || 'udp://localhost:12201' - @max_size = @gelf_options.delete(:max_size) || 'WAN' + options = options.dup + @url = options.delete(:url) || 'udp://localhost:12201' + @max_size = options.delete(:max_size) || 'WAN' uri = URI.parse(@url) @server = uri.host @port = uri.port protocol = uri.scheme.to_sym raise(ArgumentError, "Invalid protocol value: #{protocol}. Must be :udp or :tcp") unless [:udp, :tcp].include?(protocol) - @gelf_options[:protocol] = protocol == :tcp ? GELF::Protocol::TCP : GELF::Protocol::UDP - @gelf_options[:facility] = @gelf_options.delete(:application) || SemanticLogger.application + options[:protocol] = protocol == :tcp ? GELF::Protocol::TCP : GELF::Protocol::UDP - options = { - level: @gelf_options.delete(:level), - filter: @gelf_options.delete(:filter), - formatter: @gelf_options.delete(:formatter) - } - reopen + @gelf_options = options + options = extract_subscriber_options!(options) super(options, &block) + reopen end # Re-open after process fork def reopen + @gelf_options[:facility] = application @notifier = GELF::Notifier.new(@server, @port, @max_size, @gelf_options) @notifier.collect_file_and_line = false end # Returns [Hash] of parameters to send def call(log, logger) - h = log.to_h + h = log.to_h(host, application) h.delete(:time) h[:timestamp] = log.time.utc.to_f h[:level] = logger.map_level(log) h[:level_str] = log.level.to_s h[:short_message] = h.delete(:message) if log.message