Class: SemanticLogger::Appender::Elasticsearch

Inherits:
Subscriber show all
Defined in:
lib/semantic_logger/appender/elasticsearch.rb

Instance Attribute Summary collapse

Attributes inherited from Subscriber

#application, #formatter, #host, #logger, #metrics

Attributes inherited from Base

#filter, #name

Instance Method Summary collapse

Methods inherited from Subscriber

#close, #flush, #level, #should_log?

Methods inherited from Base

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

Constructor Details

#initialize(url: 'http://localhost:9200', index: 'semantic_logger', type: 'log', level: nil, formatter: nil, filter: nil, application: nil, host: nil, metrics: false, **elasticsearch_args, &block) ⇒ Elasticsearch

Create Elasticsearch appender over persistent HTTP(S)

Parameters:

index: [String]
  Prefix of the index to store the logs in Elasticsearch.
  The final index appends the date so that indexes are used per day.
    I.e. The final index will look like 'semantic_logger-YYYY.MM.DD'
  Default: 'semantic_logger'

type: [String]
  Document type to associate with logs when they are written.
  Default: 'log'

level: [:trace | :debug | :info | :warn | :error | :fatal]
  Override the log level for this appender.
  Default: SemanticLogger.default_level

formatter: [Object|Proc|Symbol|Hash]
  An instance of a class that implements #call, or a Proc to be used to format
  the output from this appender
  Default: :raw_json (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

Elasticsearch Parameters:

url: [String]
  Fully qualified address to the Elasticsearch service.
  Default: 'http://localhost:9200'

hosts: [String|Hash|Array]
  Single host passed as a String or Hash, or multiple hosts
  passed as an Array; `host` or `url` keys are also valid.
  Note:
    :url above is ignored when supplying this option.

resurrect_after [Float]
  After how many seconds a dead connection should be tried again.

reload_connections [true|false|Integer]
  Reload connections after X requests.
  Default: false

randomize_hosts [true|false]
  Shuffle connections on initialization and reload.
  Default: false

sniffer_timeout [Integer]
  Timeout for reloading connections in seconds.
  Default: 1

retry_on_failure [true|false|Integer]
  Retry X times when request fails before raising and exception.
  Default: false

retry_on_status [Array<Number>]
  Retry when specific status codes are returned.

reload_on_failure [true|false]
  Reload connections after failure.
  Default: false

request_timeout [Integer]
  The request timeout to be passed to transport in options.

adapter [Symbol]
  A specific adapter for Faraday (e.g. `:patron`)

transport_options [Hash]
  Options to be passed to the `Faraday::Connection` constructor.

transport_class [Constant]
  A specific transport class to use, will be initialized by
  the client and passed hosts and all arguments.

transport [Object]
  A specific transport instance.

serializer_class [Constant]
  A specific serializer class to use, will be initialized by
  the transport and passed the transport instance.

selector [Elasticsearch::Transport::Transport::Connections::Selector::Base]
  An instance of selector strategy derived from `Elasticsearch::Transport::Transport::Connections::Selector::Base`.

send_get_body_as [String]
  Specify the HTTP method to use for GET requests with a body.
  Default: 'GET'


121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/semantic_logger/appender/elasticsearch.rb', line 121

def initialize(url: 'http://localhost:9200',
               index: 'semantic_logger',
               type: 'log',
               level: nil,
               formatter: nil,
               filter: nil,
               application: nil,
               host: nil,
               metrics: false,
               **elasticsearch_args,
               &block)

  @url                         = url
  @index                       = index
  @type                        = type
  @elasticsearch_args          = elasticsearch_args.dup
  @elasticsearch_args[:url]    = url if url && !elasticsearch_args[:hosts]
  @elasticsearch_args[:logger] = logger

  super(level: level, formatter: formatter, filter: filter, application: application, host: host, metrics: false, &block)
  reopen
end

Instance Attribute Details

#batch_sizeObject

Returns the value of attribute batch_size.



20
21
22
# File 'lib/semantic_logger/appender/elasticsearch.rb', line 20

def batch_size
  @batch_size
end

#clientObject

Returns the value of attribute client.



20
21
22
# File 'lib/semantic_logger/appender/elasticsearch.rb', line 20

def client
  @client
end

#elasticsearch_argsObject

Returns the value of attribute elasticsearch_args.



20
21
22
# File 'lib/semantic_logger/appender/elasticsearch.rb', line 20

def elasticsearch_args
  @elasticsearch_args
end

#flush_intervalObject

Returns the value of attribute flush_interval.



20
21
22
# File 'lib/semantic_logger/appender/elasticsearch.rb', line 20

def flush_interval
  @flush_interval
end

#indexObject

Returns the value of attribute index.



20
21
22
# File 'lib/semantic_logger/appender/elasticsearch.rb', line 20

def index
  @index
end

#timeout_intervalObject

Returns the value of attribute timeout_interval.



20
21
22
# File 'lib/semantic_logger/appender/elasticsearch.rb', line 20

def timeout_interval
  @timeout_interval
end

#typeObject

Returns the value of attribute type.



20
21
22
# File 'lib/semantic_logger/appender/elasticsearch.rb', line 20

def type
  @type
end

#urlObject

Returns the value of attribute url.



20
21
22
# File 'lib/semantic_logger/appender/elasticsearch.rb', line 20

def url
  @url
end

Instance Method Details

#batch(logs) ⇒ Object



155
156
157
158
159
160
161
162
163
# File 'lib/semantic_logger/appender/elasticsearch.rb', line 155

def batch(logs)
  messages = []
  logs.each do |log|
    messages << bulk_index(log) << formatter.call(log, self)
  end

  write_to_elasticsearch(messages)
  true
end

#log(log) ⇒ Object

Log to the index for today



149
150
151
152
153
# File 'lib/semantic_logger/appender/elasticsearch.rb', line 149

def log(log)
  bulk_payload = formatter.call(log, self)
  write_to_elasticsearch([bulk_index(log), bulk_payload])
  true
end

#reopenObject



144
145
146
# File 'lib/semantic_logger/appender/elasticsearch.rb', line 144

def reopen
  @client = ::Elasticsearch::Client.new(@elasticsearch_args)
end