Class: SemanticLogger::Appender::Graylog
- Inherits:
-
Subscriber
- Object
- Base
- Subscriber
- SemanticLogger::Appender::Graylog
- Defined in:
- lib/semantic_logger/appender/graylog.rb
Overview
Forward log entries to a Graylog server.
Example:
SemanticLogger.add_appender(
appender: :graylog,
url: 'udp://localhost:12201'
)
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
Constant Summary collapse
- LEVEL_MAP =
Map Semantic Logger levels to Graylog levels
{ fatal: GELF::FATAL, error: GELF::ERROR, warn: GELF::WARN, info: GELF::INFO, debug: GELF::DEBUG, trace: GELF::DEBUG }
Instance Attribute Summary collapse
-
#notifier ⇒ Object
readonly
Returns the value of attribute notifier.
Attributes inherited from Subscriber
#application, #formatter, #host
Attributes inherited from Base
Instance Method Summary collapse
-
#call(log, logger) ⇒ Object
Returns [Hash] of parameters to send.
-
#initialize(options = {}, &block) ⇒ Graylog
constructor
Create Graylog log appender.
-
#log(log) ⇒ Object
Forward log messages.
-
#map_level(log) ⇒ Object
Returns the Graylog level for the supplied log message.
-
#reopen ⇒ Object
Re-open after process fork.
Methods inherited from Subscriber
#close, #default_formatter, #flush, #level
Methods inherited from Base
#fast_tag, #level, #level=, #measure, #payload, #pop_tags, #push_tags, #silence, #tagged, #tags, #with_payload
Constructor Details
#initialize(options = {}, &block) ⇒ Graylog
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"
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
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/semantic_logger/appender/graylog.rb', line 71 def initialize( = {}, &block) = .dup @url = .delete(:url) || 'udp://localhost:12201' @max_size = .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) [:protocol] = protocol == :tcp ? GELF::Protocol::TCP : GELF::Protocol::UDP @gelf_options = = () super(, &block) reopen end |
Instance Attribute Details
#notifier ⇒ Object (readonly)
Returns the value of attribute notifier.
32 33 34 |
# File 'lib/semantic_logger/appender/graylog.rb', line 32 def notifier @notifier end |
Instance Method Details
#call(log, logger) ⇒ Object
Returns [Hash] of parameters to send
100 101 102 103 104 105 106 107 108 |
# File 'lib/semantic_logger/appender/graylog.rb', line 100 def call(log, logger) 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. h end |
#log(log) ⇒ Object
Forward log messages
111 112 113 114 115 116 |
# File 'lib/semantic_logger/appender/graylog.rb', line 111 def log(log) return false unless should_log?(log) @notifier.notify!(formatter.call(log, self)) true end |
#map_level(log) ⇒ Object
Returns the Graylog level for the supplied log message
119 120 121 |
# File 'lib/semantic_logger/appender/graylog.rb', line 119 def map_level(log) LEVEL_MAP[log.level] end |
#reopen ⇒ Object
Re-open after process fork
93 94 95 96 97 |
# File 'lib/semantic_logger/appender/graylog.rb', line 93 def reopen @gelf_options[:facility] = application @notifier = GELF::Notifier.new(@server, @port, @max_size, @gelf_options) @notifier.collect_file_and_line = false end |