semantic_logger 2.9.0 → 2.9.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/file.rb +5 -1
- data/lib/semantic_logger/appender/mongodb.rb +5 -1
- data/lib/semantic_logger/appender/new_relic.rb +3 -3
- data/lib/semantic_logger/appender/syslog.rb +37 -35
- data/lib/semantic_logger/appender/wrapper.rb +5 -0
- data/lib/semantic_logger/version.rb +1 -1
- data/test/logger_test.rb +14 -3
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 16021fcc1001bf8f9a7805c0e041856ac2a8e7d4
|
|
4
|
+
data.tar.gz: c5cc838698726569a32679031348e8d6e970d0df
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 55d8f67c85aa0d40e31d566b63a2baffd5aadaff647c147f9856154c64d2fb8e34f2a690de923c1238175b41ae85a8f6c366fb33c69b2dd8e4690c3909f20b0e
|
|
7
|
+
data.tar.gz: bcf75d343fec7bf5c0f13b1260ed735ef0cedbea19bf6530010c91e8ca3744dc3698d90f5214e0b7359e6a7f7248accfded5a9a3d38cfae572c504d5c4102a0e
|
|
@@ -72,10 +72,14 @@ module SemanticLogger
|
|
|
72
72
|
# trace entries are mapped to debug since :trace is not supported by the
|
|
73
73
|
# Ruby or Rails Loggers
|
|
74
74
|
def log(log)
|
|
75
|
+
# Ensure minimum log level is met, and check filter
|
|
76
|
+
return false if (level_index > (log.level_index || 0)) || !include_message?(log)
|
|
77
|
+
|
|
75
78
|
# Since only one appender thread will be writing to the file at a time
|
|
76
79
|
# it is not necessary to protect access to the file with a semaphore
|
|
77
80
|
# Allow this logger to filter out log levels lower than it's own
|
|
78
|
-
@log.write(@formatter.call(log) << "\n")
|
|
81
|
+
@log.write(@formatter.call(log) << "\n")
|
|
82
|
+
true
|
|
79
83
|
end
|
|
80
84
|
|
|
81
85
|
# Flush all pending logs to disk.
|
|
@@ -178,8 +178,12 @@ module SemanticLogger
|
|
|
178
178
|
|
|
179
179
|
# Log the message to MongoDB
|
|
180
180
|
def log(log)
|
|
181
|
+
# Ensure minimum log level is met, and check filter
|
|
182
|
+
return false if (level_index > (log.level_index || 0)) || !include_message?(log)
|
|
183
|
+
|
|
181
184
|
# Insert log entry into Mongo
|
|
182
|
-
collection.insert(formatter.call(log), :w=>@write_concern)
|
|
185
|
+
collection.insert(formatter.call(log), :w=>@write_concern)
|
|
186
|
+
true
|
|
183
187
|
end
|
|
184
188
|
|
|
185
189
|
end
|
|
@@ -92,14 +92,14 @@ class SemanticLogger::Appender::NewRelic < SemanticLogger::Appender::Base
|
|
|
92
92
|
|
|
93
93
|
# Send an error notification to New Relic
|
|
94
94
|
def log(log)
|
|
95
|
-
# Ensure minimum log level is met
|
|
96
|
-
return false
|
|
95
|
+
# Ensure minimum log level is met, and check filter
|
|
96
|
+
return false if (level_index > (log.level_index || 0)) || !include_message?(log)
|
|
97
97
|
|
|
98
98
|
# For more documentation on the NewRelic::Agent.notice_error method see:
|
|
99
99
|
# http://rubydoc.info/github/newrelic/rpm/NewRelic/Agent#notice_error-instance_method
|
|
100
100
|
# and https://docs.newrelic.com/docs/ruby/ruby-agent-api
|
|
101
101
|
NewRelic::Agent.notice_error(log.exception || self.class.first_non_empty_line(log.message), formatter.call(log))
|
|
102
|
-
|
|
102
|
+
true
|
|
103
103
|
end
|
|
104
104
|
|
|
105
105
|
end
|
|
@@ -48,12 +48,12 @@ module SemanticLogger
|
|
|
48
48
|
# ::Syslog::LOG_INFO - "Informational message"
|
|
49
49
|
# ::Syslog::LOG_DEBUG - "Debugging information"
|
|
50
50
|
DEFAULT_LEVEL_MAP = {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
51
|
+
:fatal => ::Syslog::LOG_CRIT,
|
|
52
|
+
:error => ::Syslog::LOG_ERR,
|
|
53
|
+
:warn => ::Syslog::LOG_WARNING,
|
|
54
|
+
:info => ::Syslog::LOG_NOTICE,
|
|
55
|
+
:debug => ::Syslog::LOG_INFO,
|
|
56
|
+
:trace => ::Syslog::LOG_DEBUG
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
# For more information on the Syslog constants used below see http://ruby-doc.org/stdlib-2.0.0/libdoc/syslog/rdoc/Syslog.html
|
|
@@ -176,24 +176,24 @@ module SemanticLogger
|
|
|
176
176
|
end
|
|
177
177
|
|
|
178
178
|
case @protocol
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
179
|
+
when :syslog
|
|
180
|
+
::Syslog.open(@ident, options, @facility)
|
|
181
|
+
when :tcp
|
|
182
|
+
# The resilient_socket gem is required when logging over TCP.
|
|
183
|
+
begin
|
|
184
|
+
require 'resilient_socket'
|
|
185
|
+
rescue LoadError
|
|
186
|
+
raise 'Missing gem: resilient_socket. This gem is required when logging over TCP. To fix this error: gem install resilient_socket'
|
|
187
|
+
end
|
|
188
|
+
options = tcp_client_options || {}
|
|
189
|
+
options[:server] = "#{@host}:#{@port}"
|
|
190
|
+
@remote_syslog = ResilientSocket::TCPClient.new(options)
|
|
191
|
+
# Use the local logger for @remote_syslog so errors with the remote logger can be recorded locally.
|
|
192
|
+
@remote_syslog.logger = SemanticLogger::Logger.logger
|
|
193
|
+
when :udp
|
|
194
|
+
@remote_syslog = UDPSocket.new
|
|
195
|
+
else
|
|
196
|
+
raise "Unsupported protocol: #{protocol}"
|
|
197
197
|
end
|
|
198
198
|
|
|
199
199
|
super(level, filter, &block)
|
|
@@ -201,18 +201,20 @@ module SemanticLogger
|
|
|
201
201
|
|
|
202
202
|
# Write the log using the specified protocol and host.
|
|
203
203
|
def log(log)
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
204
|
+
# Ensure minimum log level is met, and check filter
|
|
205
|
+
return false if (level_index > (log.level_index || 0)) || !include_message?(log)
|
|
206
|
+
|
|
207
|
+
case @protocol
|
|
208
|
+
when :syslog
|
|
209
|
+
::Syslog.log @level_map[log.level], formatter.call(log)
|
|
210
|
+
when :tcp
|
|
211
|
+
@remote_syslog.retry_on_connection_failure { @remote_syslog.write("#{syslog_packet_formatter(log)}\r\n") }
|
|
212
|
+
when :udp
|
|
213
|
+
@remote_syslog.send syslog_packet_formatter(log), 0, @host, @port
|
|
214
|
+
else
|
|
215
|
+
raise "Unsupported protocol: #{protocol}"
|
|
215
216
|
end
|
|
217
|
+
true
|
|
216
218
|
end
|
|
217
219
|
|
|
218
220
|
# Flush is called by the semantic_logger during shutdown.
|
|
@@ -40,7 +40,12 @@ module SemanticLogger
|
|
|
40
40
|
# trace entries are mapped to debug since :trace is not supported by the
|
|
41
41
|
# Ruby or Rails Loggers
|
|
42
42
|
def log(log)
|
|
43
|
+
# Check filter
|
|
44
|
+
return false unless include_message?(log)
|
|
45
|
+
|
|
46
|
+
# Underlying wrapper logger implements log level, so don't check here
|
|
43
47
|
@logger.send(log.level == :trace ? :debug : log.level, @formatter.call(log))
|
|
48
|
+
true
|
|
44
49
|
end
|
|
45
50
|
|
|
46
51
|
# Flush all pending logs to disk.
|
data/test/logger_test.rb
CHANGED
|
@@ -12,13 +12,14 @@ class LoggerTest < Test::Unit::TestCase
|
|
|
12
12
|
context SemanticLogger::Logger do
|
|
13
13
|
# Test each filter
|
|
14
14
|
[ nil, /\ALogger/, Proc.new{|l| (/\AExclude/ =~ l.message).nil? } ].each do |filter|
|
|
15
|
-
context "filter: #{filter.
|
|
15
|
+
context "filter: #{filter.class.name}" do
|
|
16
16
|
setup do
|
|
17
17
|
# Use a mock logger that just keeps the last logged entry in an instance
|
|
18
18
|
# variable
|
|
19
19
|
SemanticLogger.default_level = :trace
|
|
20
20
|
@mock_logger = MockLogger.new
|
|
21
|
-
SemanticLogger.add_appender(@mock_logger)
|
|
21
|
+
appender = SemanticLogger.add_appender(@mock_logger)
|
|
22
|
+
appender.filter = filter
|
|
22
23
|
|
|
23
24
|
# Add mock metric subscriber
|
|
24
25
|
$last_metric = nil
|
|
@@ -27,7 +28,7 @@ class LoggerTest < Test::Unit::TestCase
|
|
|
27
28
|
end
|
|
28
29
|
|
|
29
30
|
# Use this test's class name as the application name in the log output
|
|
30
|
-
@logger = SemanticLogger
|
|
31
|
+
@logger = SemanticLogger[self.class]
|
|
31
32
|
@hash = { :session_id => 'HSSKLEU@JDK767', :tracking_number => 12345 }
|
|
32
33
|
@hash_str = @hash.inspect.sub("{", "\\{").sub("}", "\\}")
|
|
33
34
|
assert_equal [], @logger.tags
|
|
@@ -54,6 +55,16 @@ class LoggerTest < Test::Unit::TestCase
|
|
|
54
55
|
assert_nil @mock_logger.message
|
|
55
56
|
end
|
|
56
57
|
end
|
|
58
|
+
|
|
59
|
+
should "exclude log messages using RegExp filter" do
|
|
60
|
+
if filter.is_a?(Regexp)
|
|
61
|
+
logger = SemanticLogger::Logger.new('NotLogger', :trace, filter)
|
|
62
|
+
logger.send(level, 'Ignore all log messages from this class', @hash) { "Calculations" }
|
|
63
|
+
SemanticLogger.flush
|
|
64
|
+
assert_nil @mock_logger.message
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
57
68
|
end
|
|
58
69
|
end
|
|
59
70
|
|
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: 2.9.
|
|
4
|
+
version: 2.9.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: 2014-
|
|
11
|
+
date: 2014-07-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: sync_attr
|