applicaster-logger 0.6.7 → 0.7.0
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/applicaster-logger.rb +2 -0
- data/lib/applicaster/logger.rb +47 -5
- data/lib/applicaster/logger/version.rb +1 -1
- data/lib/applicaster/sidekiq/exception_logger.rb +27 -0
- data/lib/applicaster/sidekiq/job_logger.rb +50 -0
- data/lib/applicaster/sidekiq/middleware.rb +1 -2
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14eb9fb38934bed703677d907edb9a25dbf3c6fa
|
4
|
+
data.tar.gz: a99a2cb2212f1d8d3846fb3790b254d030b9afbc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7240f155356278285e8fd0a7c6c2523acf49dfeb78eab01ffaf66a27c4fa5484b6f32946e902e07f17754780ed2d34bd8d17c85e93d503c0531f4b20873afb43
|
7
|
+
data.tar.gz: 89a300fbbf6c3eb294c0408a7d64178443354061d718ca37e35cfa2f571a9c76266ccc1d17f30e18980df90b04fa38af194e7c3445f6ec7b78c9264e14e20477
|
data/lib/applicaster-logger.rb
CHANGED
data/lib/applicaster/logger.rb
CHANGED
@@ -38,12 +38,22 @@ module Applicaster
|
|
38
38
|
end
|
39
39
|
|
40
40
|
if defined?(::Sidekiq)
|
41
|
-
require 'sidekiq/api'
|
42
|
-
|
43
41
|
::Sidekiq.configure_server do |config|
|
44
|
-
config.
|
45
|
-
|
46
|
-
|
42
|
+
config.error_handlers.delete_if { |h| h.is_a?(::Sidekiq::ExceptionHandler::Logger) }
|
43
|
+
::Sidekiq.error_handlers << Applicaster::Sidekiq::ExceptionLogger.new
|
44
|
+
|
45
|
+
if Gem::Version.new(::Sidekiq::VERSION) < Gem::Version.new("5.0")
|
46
|
+
require 'sidekiq/api'
|
47
|
+
config.server_middleware do |chain|
|
48
|
+
chain.remove ::Sidekiq::Middleware::Server::Logging
|
49
|
+
chain.add Applicaster::Sidekiq::Middleware::Server::LogstashLogging
|
50
|
+
end
|
51
|
+
else
|
52
|
+
logger = LogStashLogger.new(logstash_config)
|
53
|
+
logger.level = app.config.applicaster_logger.level
|
54
|
+
logger.formatter = Applicaster::Logger::Formatter.new(facility: "sidekiq")
|
55
|
+
::Sidekiq::Logging.logger = logger
|
56
|
+
::Sidekiq.options[:job_logger] = ::Applicaster::Sidekiq::JobLogger
|
47
57
|
end
|
48
58
|
end
|
49
59
|
end
|
@@ -68,5 +78,37 @@ module Applicaster
|
|
68
78
|
def self.current_thread_data
|
69
79
|
Thread.current[:logger_thread_data] || {}
|
70
80
|
end
|
81
|
+
|
82
|
+
# Truncates +text+ to at most <tt>bytesize</tt> bytes in length without
|
83
|
+
# breaking string encoding by splitting multibyte characters or breaking
|
84
|
+
# grapheme clusters ("perceptual characters") by truncating at combining
|
85
|
+
# characters.
|
86
|
+
# Code taken from activesupport/lib/active_support/core_ext/string/filters.rb
|
87
|
+
def self.truncate_bytes(text, truncate_at, omission: "...")
|
88
|
+
omission ||= ""
|
89
|
+
|
90
|
+
case
|
91
|
+
when text.bytesize <= truncate_at
|
92
|
+
text.dup
|
93
|
+
when omission.bytesize > truncate_at
|
94
|
+
raise ArgumentError, "Omission #{omission.inspect} is #{omission.bytesize}, larger than the truncation length of #{truncate_at} bytes"
|
95
|
+
when omission.bytesize == truncate_at
|
96
|
+
omission.dup
|
97
|
+
else
|
98
|
+
text.class.new.tap do |cut|
|
99
|
+
cut_at = truncate_at - omission.bytesize
|
100
|
+
|
101
|
+
text.scan(/\X/) do |grapheme|
|
102
|
+
if cut.bytesize + grapheme.bytesize <= cut_at
|
103
|
+
cut << grapheme
|
104
|
+
else
|
105
|
+
break
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
cut << omission
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
71
113
|
end
|
72
114
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Applicaster
|
2
|
+
module Sidekiq
|
3
|
+
class ExceptionLogger
|
4
|
+
def call(exception, ctxHash)
|
5
|
+
item = ctxHash[:job]
|
6
|
+
queue = item[:queue]
|
7
|
+
|
8
|
+
event = log_context(item, queue).merge({
|
9
|
+
message: "Fail: #{item['class']} JID-#{item['jid']}",
|
10
|
+
exception_class: exception.class.to_s,
|
11
|
+
exception_message: Applicaster::Logger.truncate_bytes(exception.message.to_s, 500),
|
12
|
+
})
|
13
|
+
logger.info(event)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def log_context(item, queue)
|
19
|
+
Applicaster::Sidekiq::JobLogger.log_context(item, queue)
|
20
|
+
end
|
21
|
+
|
22
|
+
def logger
|
23
|
+
::Sidekiq.logger
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Applicaster
|
2
|
+
module Sidekiq
|
3
|
+
class JobLogger
|
4
|
+
def call(item, queue)
|
5
|
+
puts "JobLogger"
|
6
|
+
start = Time.now
|
7
|
+
event = log_context(item, queue).merge({
|
8
|
+
message: "Start: #{item['class']} JID-#{item['jid']}",
|
9
|
+
})
|
10
|
+
logger.info(event)
|
11
|
+
yield
|
12
|
+
event = log_context(item, queue).merge({
|
13
|
+
message: "Done: #{item['class']} JID-#{item['jid']}",
|
14
|
+
})
|
15
|
+
event[:sidekiq][:duration] = elapsed(start)
|
16
|
+
logger.info(event)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def elapsed(start)
|
22
|
+
(Time.now - start).round(3)
|
23
|
+
end
|
24
|
+
|
25
|
+
def logger
|
26
|
+
::Sidekiq.logger
|
27
|
+
end
|
28
|
+
|
29
|
+
def log_context(item, queue)
|
30
|
+
self.class.log_context(item, queue)
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.sidekiq_context
|
34
|
+
::Thread.current[:sidekiq_context]
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.log_context(item, queue)
|
38
|
+
{
|
39
|
+
sidekiq: {
|
40
|
+
jid: item['jid'],
|
41
|
+
context: sidekiq_context,
|
42
|
+
worker: item['class'].to_s,
|
43
|
+
queue: queue,
|
44
|
+
args: item['args'].inspect,
|
45
|
+
}
|
46
|
+
}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -48,8 +48,7 @@ module Applicaster
|
|
48
48
|
args: item['args'].inspect,
|
49
49
|
runtime: elapsed(start),
|
50
50
|
exception_class: e.class.to_s,
|
51
|
-
exception_message: e.message,
|
52
|
-
backtrace: e.backtrace.join("\n"),
|
51
|
+
exception_message: Applicaster::Logger.truncate_bytes(e.message.to_s, 500),
|
53
52
|
memory: memory
|
54
53
|
}))
|
55
54
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: applicaster-logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vitaly Gorodetsky
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-08-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logstash-logger
|
@@ -85,6 +85,8 @@ files:
|
|
85
85
|
- lib/applicaster/logger/railtie.rb
|
86
86
|
- lib/applicaster/logger/version.rb
|
87
87
|
- lib/applicaster/rack/request_data.rb
|
88
|
+
- lib/applicaster/sidekiq/exception_logger.rb
|
89
|
+
- lib/applicaster/sidekiq/job_logger.rb
|
88
90
|
- lib/applicaster/sidekiq/middleware.rb
|
89
91
|
homepage: ''
|
90
92
|
licenses:
|
@@ -106,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
108
|
version: '0'
|
107
109
|
requirements: []
|
108
110
|
rubyforge_project:
|
109
|
-
rubygems_version: 2.
|
111
|
+
rubygems_version: 2.6.13
|
110
112
|
signing_key:
|
111
113
|
specification_version: 4
|
112
114
|
summary: Configures loggers to send logs to logstash
|