class SemanticLogger::Appender::Graylog
Attributes
gelf_options[RW]
level_map[RW]
max_size[RW]
notifier[R]
port[R]
protocol[R]
server[R]
url[RW]
Public Class Methods
new(url: "udp://localhost:12201", max_size: "WAN", gelf_options: {}, level_map: LevelMap.new, **args, &block)
click to toggle source
Create Graylog
log appender.
Options:
url: [String] Valid URL to post to. Log to UDP Example: 'udp://localhost:12201' Log to TCP Example: 'tcp://localhost:12201' Default: 'udp://localhost:12201' max_size: [String] Max udp packet size. Ignored when protocol is :tcp Default: "WAN" gelf_options: [Hash] Custom gelf options. See Graylog documentation. level: [:trace | :debug | :info | :warn | :error | :fatal] Override the log level for this appender. Default: SemanticLogger.default_level formatter: [Object|Proc] An instance of a class that implements #call, or a Proc to be used to format the output from this appender Default: Use the built-in formatter (See: #call) 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
Calls superclass method
SemanticLogger::Subscriber::new
# File lib/semantic_logger/appender/graylog.rb, line 85 def initialize(url: "udp://localhost:12201", max_size: "WAN", gelf_options: {}, level_map: LevelMap.new, **args, &block) @url = url @max_size = max_size @gelf_options = gelf_options @level_map = level_map.is_a?(LevelMap) ? level_map : LevelMap.new(level_map) super(**args, &block) reopen end
Public Instance Methods
call(log, logger)
click to toggle source
Returns [Hash] of parameters to send
# File lib/semantic_logger/appender/graylog.rb, line 120 def call(log, logger) h = default_formatter.call(log, logger) h[:short_message] = h.delete(:message) if h[:short_message].nil? h[:short_message] = log.exception.nil? ? "<no-exception-message>" : log.exception.message end h[:level] = logger.level_map[log.level] h[:level_str] = log.level.to_s h[:duration_str] = h.delete(:duration) h end
log(log)
click to toggle source
Forward log messages
# File lib/semantic_logger/appender/graylog.rb, line 134 def log(log) notifier.notify!(formatter.call(log, self)) true end
reopen()
click to toggle source
Re-open after process fork
# File lib/semantic_logger/appender/graylog.rb, line 102 def reopen uri = URI.parse(@url) @server = uri.host @port = uri.port @protocol = uri.scheme.to_sym unless %i[udp tcp].include?(@protocol) raise(ArgumentError, "Invalid protocol value: #{@protocol}. Must be :udp or :tcp") end gelf_options[:protocol] ||= (@protocol == :tcp ? GELF::Protocol::TCP : GELF::Protocol::UDP) gelf_options[:facility] ||= application @notifier = GELF::Notifier.new(server, port, max_size, gelf_options) @notifier.collect_file_and_line = false end
Private Instance Methods
default_formatter()
click to toggle source
# File lib/semantic_logger/appender/graylog.rb, line 141 def default_formatter SemanticLogger::Formatters::Raw.new(time_format: :seconds, time_key: :timestamp) end