Class: SemanticLogger::Appender::ElasticsearchHttp

Inherits:
Http
  • Object
show all
Defined in:
lib/semantic_logger/appender/elasticsearch_http.rb

Instance Attribute Summary collapse

Attributes inherited from Http

#compress, #continue_timeout, #header, #http, #open_timeout, #path, #port, #proxy_url, #read_timeout, #server, #ssl_options, #url, #username

Attributes inherited from Subscriber

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

Instance Method Summary collapse

Methods inherited from Http

#batch, #batch_by_default?, #reopen

Methods inherited from Subscriber

#batch_by_default?, #close, #console_output?, #console_stream, #default_formatter, #flush, #level, #should_log?

Constructor Details

#initialize(index: "semantic_logger", type: nil, url: "http://localhost:9200", **http_args) ⇒ ElasticsearchHttp

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]
Deprecated and ignored. Document `_type` has been unused since
Elasticsearch 7. Passing it logs a deprecation warning; it will be
removed in v6.

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: 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


54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/semantic_logger/appender/elasticsearch_http.rb', line 54

def initialize(index: "semantic_logger",
               type: nil,
               url: "http://localhost:9200",
               **http_args,
               &)
  if type
    Kernel.warn(
      "The Elasticsearch/OpenSearch appender `type:` parameter is deprecated and will be removed in v6. " \
      "Document `_type` has been unused since Elasticsearch 7 and is ignored by OpenSearch.",
      category: :deprecated
    )
  end

  @index = index
  super(url: url, **http_args, &)

  @request_path = "#{@path.end_with?('/') ? @path : "#{@path}/"}#{@index}-%Y.%m.%d"
  @logging_path = "#{@request_path}/_doc"
end

Instance Attribute Details

#indexObject

Returns the value of attribute index.



16
17
18
# File 'lib/semantic_logger/appender/elasticsearch_http.rb', line 16

def index
  @index
end

Instance Method Details

#delete_all(date = Date.today) ⇒ Object

Deletes all log data captured for a day.



80
81
82
# File 'lib/semantic_logger/appender/elasticsearch_http.rb', line 80

def delete_all(date = Date.today)
  delete(date.strftime(@request_path))
end

#log(log) ⇒ Object

Log to the index for today.



75
76
77
# File 'lib/semantic_logger/appender/elasticsearch_http.rb', line 75

def log(log)
  post(formatter.call(log, self), log.time.strftime(@logging_path))
end