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