semantic_logger 3.0.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/semantic_logger/appender/base.rb +1 -0
- data/lib/semantic_logger/appender/elasticsearch.rb +15 -7
- data/lib/semantic_logger/appender/http.rb +14 -12
- data/lib/semantic_logger/appender/splunk_http.rb +1 -0
- data/lib/semantic_logger/version.rb +1 -1
- data/test/appender/elasticsearch_test.rb +72 -0
- data/test/appender/splunk_http_test.rb +1 -4
- metadata +5 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 50213eafcd6560b8240844cfb686a2a954537091
|
4
|
+
data.tar.gz: d6df1d6905b315ccef4915cf59b819e62d2697bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 048295e8e5a07f91ffe44a2108cb12135fbcfb25d604ad3ec0656e41cc0435689dc215de8bd0c994b81ec1fcf4e850e46d7733c7e2a5676e3b2e92ecc42971e5
|
7
|
+
data.tar.gz: ce6f018889578dc8a44855e2bfc528d939cf5b8c0bd4872c41f55b5e1537adb8e99cd231c86e4829164bea1a5f1c2b728c2df52c566d79d73bcbf7bf578370b5
|
@@ -18,8 +18,10 @@ class SemanticLogger::Appender::Elasticsearch < SemanticLogger::Appender::Http
|
|
18
18
|
#
|
19
19
|
# Parameters:
|
20
20
|
# index: [String]
|
21
|
-
#
|
22
|
-
#
|
21
|
+
# Prefix of the index to store the logs in Elasticsearch.
|
22
|
+
# The final index appends the date so that indexes are used per day.
|
23
|
+
# I.e. The final index will look like 'semantic_logger-YYYY.MM.DD'
|
24
|
+
# Default: 'semantic_logger'
|
23
25
|
#
|
24
26
|
# type: [String]
|
25
27
|
# Document type to associate with logs when they are written.
|
@@ -36,18 +38,24 @@ class SemanticLogger::Appender::Elasticsearch < SemanticLogger::Appender::Http
|
|
36
38
|
# The Proc must return true or false.
|
37
39
|
def initialize(options, &block)
|
38
40
|
options = options.dup
|
39
|
-
@index = options.delete(:index) || "semantic_logger
|
41
|
+
@index = options.delete(:index) || "semantic_logger"
|
40
42
|
@type = options.delete(:type) || 'log'
|
41
43
|
options[:url] ||= 'http://localhost:9200'
|
42
44
|
|
43
45
|
super(options, &block)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Log to the index for today
|
49
|
+
def log(log)
|
50
|
+
return false if (level_index > (log.level_index || 0)) ||
|
51
|
+
!include_message?(log) # Filtered out?
|
44
52
|
|
45
|
-
|
53
|
+
post(formatter.call(log, self), "#{index}-#{log.time.strftime('%Y.%m.%d')}/#{type}")
|
46
54
|
end
|
47
55
|
|
48
|
-
# Deletes all log data captured for
|
49
|
-
def delete_all
|
50
|
-
|
56
|
+
# Deletes all log data captured for a day
|
57
|
+
def delete_all(date = Date.today)
|
58
|
+
"#{index}-#{date.strftime('%Y.%m.%d')}/#{type}"
|
51
59
|
end
|
52
60
|
|
53
61
|
end
|
@@ -21,7 +21,7 @@ require 'json'
|
|
21
21
|
# SemanticLogger.add_appender(appender)
|
22
22
|
class SemanticLogger::Appender::Http < SemanticLogger::Appender::Base
|
23
23
|
attr_accessor :username, :application, :host, :compress, :header
|
24
|
-
attr_reader :http, :url, :server, :port, :
|
24
|
+
attr_reader :http, :url, :server, :port, :path, :ssl_options
|
25
25
|
|
26
26
|
# Create HTTP(S) log appender
|
27
27
|
#
|
@@ -90,11 +90,13 @@ class SemanticLogger::Appender::Http < SemanticLogger::Appender::Base
|
|
90
90
|
uri = URI.parse(@url)
|
91
91
|
(@ssl_options ||= {})[:use_ssl] = true if uri.scheme == 'https'
|
92
92
|
|
93
|
-
@server
|
94
|
-
@port
|
95
|
-
|
96
|
-
@
|
97
|
-
@
|
93
|
+
@server = uri.host
|
94
|
+
raise(ArgumentError, "Invalid format for :url: #{@url.inspect}. Should be similar to: 'http://hostname:port/path'") unless @url
|
95
|
+
|
96
|
+
@port = uri.port
|
97
|
+
@username = uri.user if !@username && uri.user
|
98
|
+
@password = uri.password if !@password && uri.password
|
99
|
+
@path = uri.request_uri
|
98
100
|
|
99
101
|
reopen
|
100
102
|
|
@@ -132,20 +134,20 @@ class SemanticLogger::Appender::Http < SemanticLogger::Appender::Base
|
|
132
134
|
end
|
133
135
|
|
134
136
|
# HTTP Post
|
135
|
-
def post(body, request_uri =
|
136
|
-
request = Net::HTTP::Post.new(request_uri
|
137
|
+
def post(body, request_uri = path)
|
138
|
+
request = Net::HTTP::Post.new(request_uri, @header)
|
137
139
|
process_request(request, body)
|
138
140
|
end
|
139
141
|
|
140
142
|
# HTTP Put
|
141
|
-
def put(body, request_uri =
|
142
|
-
request = Net::HTTP::Put.new(request_uri
|
143
|
+
def put(body, request_uri = path)
|
144
|
+
request = Net::HTTP::Put.new(request_uri, @header)
|
143
145
|
process_request(request, body)
|
144
146
|
end
|
145
147
|
|
146
148
|
# HTTP Delete
|
147
|
-
def delete(request_uri =
|
148
|
-
request = Net::HTTP::Delete.new(request_uri
|
149
|
+
def delete(request_uri = path)
|
150
|
+
request = Net::HTTP::Delete.new(request_uri, @header)
|
149
151
|
process_request(request)
|
150
152
|
end
|
151
153
|
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
# Unit Test for SemanticLogger::Appender::Elasticsearch
|
4
|
+
module Appender
|
5
|
+
class ElasticsearchTest < Minitest::Test
|
6
|
+
response_mock = Struct.new(:code, :body)
|
7
|
+
|
8
|
+
describe SemanticLogger::Appender::Elasticsearch do
|
9
|
+
before do
|
10
|
+
@appender = SemanticLogger::Appender::Elasticsearch.new(
|
11
|
+
url: 'http://localhost:9200'
|
12
|
+
)
|
13
|
+
@message = 'AppenderElasticsearchTest log message'
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'logs to daily indexes' do
|
17
|
+
index = nil
|
18
|
+
@appender.stub(:post, -> json, ind { index = ind }) do
|
19
|
+
@appender.info @message
|
20
|
+
end
|
21
|
+
assert_equal "semantic_logger-#{Time.now.utc.strftime('%Y.%m.%d')}/log", index
|
22
|
+
end
|
23
|
+
|
24
|
+
SemanticLogger::LEVELS.each do |level|
|
25
|
+
it "send #{level}" do
|
26
|
+
request = nil
|
27
|
+
@appender.http.stub(:request, -> r { request = r; response_mock.new('200', 'ok') }) do
|
28
|
+
@appender.send(level, @message)
|
29
|
+
end
|
30
|
+
message = JSON.parse(request.body)
|
31
|
+
assert_equal @message, message['message']
|
32
|
+
assert_equal level.to_s, message['level']
|
33
|
+
refute message['exception']
|
34
|
+
end
|
35
|
+
|
36
|
+
it "sends #{level} exceptions" do
|
37
|
+
exc = nil
|
38
|
+
begin
|
39
|
+
Uh oh
|
40
|
+
rescue Exception => e
|
41
|
+
exc = e
|
42
|
+
end
|
43
|
+
request = nil
|
44
|
+
@appender.http.stub(:request, -> r { request = r; response_mock.new('200', 'ok') }) do
|
45
|
+
@appender.send(level, 'Reading File', exc)
|
46
|
+
end
|
47
|
+
hash = JSON.parse(request.body)
|
48
|
+
assert 'Reading File', hash['message']
|
49
|
+
assert exception = hash['exception']
|
50
|
+
assert 'NameError', exception['name']
|
51
|
+
assert 'undefined local variable or method', exception['message']
|
52
|
+
assert_equal level.to_s, hash['level']
|
53
|
+
assert exception['stack_trace'].first.include?(__FILE__), exception
|
54
|
+
end
|
55
|
+
|
56
|
+
it "sends #{level} custom attributes" do
|
57
|
+
request = nil
|
58
|
+
@appender.http.stub(:request, -> r { request = r; response_mock.new('200', 'ok') }) do
|
59
|
+
@appender.send(level, @message, {key1: 1, key2: 'a'})
|
60
|
+
end
|
61
|
+
message = JSON.parse(request.body)
|
62
|
+
assert_equal @message, message['message']
|
63
|
+
assert_equal level.to_s, message['level']
|
64
|
+
refute message['stack_trace']
|
65
|
+
assert_equal(1, message['key1'], message)
|
66
|
+
assert_equal('a', message['key2'], message)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -40,9 +40,6 @@ module Appender
|
|
40
40
|
end
|
41
41
|
body = decompress_data(request.body)
|
42
42
|
hash = JSON.parse(body)
|
43
|
-
# assert message['event']['message'].include?('Reading File -- NameError: undefined local variable or method'), message['message']
|
44
|
-
# assert_equal level.to_s, message['event']['level']
|
45
|
-
# assert message['event']['backtrace'].include?(__FILE__), message['event']['backtrace']
|
46
43
|
assert 'Reading File', hash['message']
|
47
44
|
assert exception = hash['event']['exception']
|
48
45
|
assert 'NameError', exception['name']
|
@@ -60,7 +57,7 @@ module Appender
|
|
60
57
|
message = JSON.parse(body)
|
61
58
|
assert_equal @message, message['event']['message']
|
62
59
|
assert_equal level.to_s, message['event']['level']
|
63
|
-
refute message['event']['
|
60
|
+
refute message['event']['stack_trace']
|
64
61
|
assert_equal(1, message['event']['key1'], message)
|
65
62
|
assert_equal('a', message['event']['key2'], message)
|
66
63
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: semantic_logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reid Morrison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: json
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '1.7'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '1.7'
|
41
27
|
description: Next generation logging system for Ruby to support highly concurrent,
|
42
28
|
high throughput, low latency enterprise systems
|
43
29
|
email:
|
@@ -72,6 +58,7 @@ files:
|
|
72
58
|
- lib/semantic_logger/semantic_logger.rb
|
73
59
|
- lib/semantic_logger/version.rb
|
74
60
|
- test/appender/bugsnag_test.rb
|
61
|
+
- test/appender/elasticsearch_test.rb
|
75
62
|
- test/appender/file_test.rb
|
76
63
|
- test/appender/graylog_test.rb
|
77
64
|
- test/appender/http_test.rb
|
@@ -107,12 +94,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
94
|
version: '0'
|
108
95
|
requirements: []
|
109
96
|
rubyforge_project:
|
110
|
-
rubygems_version: 2.
|
97
|
+
rubygems_version: 2.4.8
|
111
98
|
signing_key:
|
112
99
|
specification_version: 4
|
113
100
|
summary: Scalable, next generation enterprise logging for Ruby
|
114
101
|
test_files:
|
115
102
|
- test/appender/bugsnag_test.rb
|
103
|
+
- test/appender/elasticsearch_test.rb
|
116
104
|
- test/appender/file_test.rb
|
117
105
|
- test/appender/graylog_test.rb
|
118
106
|
- test/appender/http_test.rb
|