Class: SemanticLogger::Appender::Splunk

Inherits:
Base
  • Object
show all
Defined in:
lib/semantic_logger/appender/splunk.rb

Overview

Splunk log appender.

Use the official splunk gem to log messages to Splunk.

Example

SemanticLogger.add_appender(
  appender: :splunk,
  username: 'username',
  password: 'password',
  host:     'localhost',
  port:     8089,
  scheme:   :https,
  index:    'main'
)

Instance Attribute Summary collapse

Attributes inherited from Base

#formatter

Attributes inherited from Base

#filter, #name

Instance Method Summary collapse

Methods inherited from Base

colorized_formatter, #default_formatter, #flush, json_formatter, #level

Methods inherited from Base

#fast_tag, #level, #level=, #measure, #payload, #pop_tags, #push_tags, #silence, #tagged, #tags, #with_payload

Constructor Details

#initialize(options, _deprecated_level = nil, &block) ⇒ Splunk

Write to Splunk.

Parameters

:username [String]
  User name to log into splunk with.
  Not required if :token has been supplied.

:password [String]
  Password to log into splunk with.
  Not required if :token has been supplied.

:token
  Supply a preauthenticated Splunk token instead of username and password.
  Not required if username and password are supplied.

:host [String]
   Splunk host name.
   Default: 'localhost'

:port [Integer]
   The Splunk management port.
   Default: 8089

:scheme [Symbol]
  Either :https or :http
  Default: :https

:index [String]
   Splunk index to use.
   Default: 'main'

:namespace [Namespace]
   Application namespace instance.

:ssl_client_cert [OpenSSL::X509::Certificate]
  Client certificate.

:ssl_client_key [OpenSSL::PKey::RSA | OpenSSL::PKey::DSA]
  Client key.

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.


78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/semantic_logger/appender/splunk.rb', line 78

def initialize(options, _deprecated_level = nil, &block)
  @config         = options.dup
  @config[:level] = _deprecated_level if _deprecated_level
  @index          = @config.delete(:index) || 'main'

  options = {
    level:     @config.delete(:level) || :error,
    formatter: @config.delete(:formatter),
    filter:    @config.delete(:filter)
  }

  reopen

  # Pass on the level and custom formatter if supplied
  super(options, &block)
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



22
23
24
# File 'lib/semantic_logger/appender/splunk.rb', line 22

def config
  @config
end

#indexObject (readonly)

Returns the value of attribute index.



22
23
24
# File 'lib/semantic_logger/appender/splunk.rb', line 22

def index
  @index
end

#serviceObject (readonly)

Returns the value of attribute service.



22
23
24
# File 'lib/semantic_logger/appender/splunk.rb', line 22

def service
  @service
end

#service_indexObject (readonly)

Returns the value of attribute service_index.



22
23
24
# File 'lib/semantic_logger/appender/splunk.rb', line 22

def service_index
  @service_index
end

Instance Method Details

#call(log, _logger) ⇒ Object

Returns [String] JSON to send to Splunk For splunk format requirements see:

http://dev.splunk.com/view/event-collector/SP-CAAAE6P


116
117
118
119
120
121
122
123
# File 'lib/semantic_logger/appender/splunk.rb', line 116

def call(log, _logger)
  h = log.to_h
  h.delete(:message)
  h.delete(:application)
  h.delete(:host)
  h.delete(:time)
  h
end

#log(log) ⇒ Object

Log the message to Splunk



106
107
108
109
110
111
# File 'lib/semantic_logger/appender/splunk.rb', line 106

def log(log)
  return false unless should_log?(log)

  service_index.submit(log.message, formatter.call(log, self))
  true
end

#reopenObject

After forking an active process call #reopen to re-open open the handles to resources



97
98
99
100
101
102
103
# File 'lib/semantic_logger/appender/splunk.rb', line 97

def reopen
  # Connect to splunk. Connect is a synonym for creating a Service by hand and calling login.
  self.service       = Splunk::connect(config)

  # The index we are logging to
  self.service_index = service.indexes[index]
end