steno 1.2.4 → 1.3.5
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 +5 -13
- data/NOTICE +14 -0
- data/Rakefile +6 -8
- data/bin/steno-prettify +24 -25
- data/lib/steno/codec/base.rb +1 -1
- data/lib/steno/codec/json.rb +24 -14
- data/lib/steno/codec.rb +2 -2
- data/lib/steno/config.rb +23 -30
- data/lib/steno/context.rb +3 -3
- data/lib/steno/json_prettifier.rb +31 -30
- data/lib/steno/log_level.rb +1 -2
- data/lib/steno/logger.rb +22 -26
- data/lib/steno/record.rb +5 -15
- data/lib/steno/sink/base.rb +2 -3
- data/lib/steno/sink/counter.rb +4 -8
- data/lib/steno/sink/eventlog.rb +16 -17
- data/lib/steno/sink/fluentd.rb +4 -5
- data/lib/steno/sink/io.rb +8 -12
- data/lib/steno/sink/syslog.rb +19 -15
- data/lib/steno/sink.rb +6 -6
- data/lib/steno/tagged_logger.rb +2 -3
- data/lib/steno/version.rb +1 -1
- data/lib/steno.rb +16 -21
- data/spec/spec_helper.rb +4 -4
- data/spec/support/barrier.rb +2 -2
- data/spec/support/shared_context_specs.rb +4 -4
- data/spec/unit/config_spec.rb +134 -133
- data/spec/unit/context_spec.rb +19 -19
- data/spec/unit/core_ext_spec.rb +14 -14
- data/spec/unit/json_codec_spec.rb +43 -23
- data/spec/unit/json_prettifier_spec.rb +25 -25
- data/spec/unit/log_level_spec.rb +8 -9
- data/spec/unit/logger_spec.rb +53 -53
- data/spec/unit/record_spec.rb +15 -15
- data/spec/unit/sink/counter_spec.rb +7 -7
- data/spec/unit/sink/eventlog_spec.rb +14 -15
- data/spec/unit/sink/fluentd_spec.rb +28 -28
- data/spec/unit/sink/io_spec.rb +62 -62
- data/spec/unit/sink/syslog_spec.rb +54 -30
- data/spec/unit/steno_spec.rb +33 -33
- data/spec/unit/tagged_logger_spec.rb +20 -18
- data/steno.gemspec +28 -28
- metadata +62 -53
data/lib/steno/sink/counter.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'steno/sink/base'
|
2
2
|
|
3
3
|
module Steno
|
4
4
|
module Sink
|
@@ -6,7 +6,6 @@ module Steno
|
|
6
6
|
end
|
7
7
|
|
8
8
|
class Steno::Sink::Counter < Steno::Sink::Base
|
9
|
-
|
10
9
|
def initialize
|
11
10
|
# Map of String -> numeric count
|
12
11
|
@counts = {}
|
@@ -17,17 +16,14 @@ class Steno::Sink::Counter < Steno::Sink::Base
|
|
17
16
|
level = record.log_level.to_s
|
18
17
|
|
19
18
|
@mutex.synchronize do
|
20
|
-
unless @counts[level]
|
21
|
-
@counts[level] = 0
|
22
|
-
end
|
19
|
+
@counts[level] = 0 unless @counts[level]
|
23
20
|
@counts[level] += 1
|
24
21
|
end
|
25
22
|
end
|
26
23
|
|
27
|
-
def flush
|
28
|
-
end
|
24
|
+
def flush; end
|
29
25
|
|
30
|
-
def to_json
|
26
|
+
def to_json(*_args)
|
31
27
|
hash = {}
|
32
28
|
@mutex.synchronize do
|
33
29
|
Steno::Logger::LEVELS.keys.each do |level_name|
|
data/lib/steno/sink/eventlog.rb
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
if Steno::Sink::WINDOWS
|
2
|
-
require
|
2
|
+
require 'steno/sink/base'
|
3
3
|
|
4
|
-
require
|
5
|
-
require
|
4
|
+
require 'singleton'
|
5
|
+
require 'thread'
|
6
6
|
require 'win32/eventlog'
|
7
7
|
|
8
8
|
class Steno::Sink::Eventlog < Steno::Sink::Base
|
9
9
|
include Singleton
|
10
10
|
|
11
11
|
LOG_LEVEL_MAP = {
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
12
|
+
fatal: Win32::EventLog::ERROR_TYPE,
|
13
|
+
error: Win32::EventLog::ERROR_TYPE,
|
14
|
+
warn: Win32::EventLog::WARN_TYPE,
|
15
|
+
info: Win32::EventLog::INFO_TYPE,
|
16
|
+
debug: Win32::EventLog::INFO_TYPE,
|
17
|
+
debug1: Win32::EventLog::INFO_TYPE,
|
18
|
+
debug2: Win32::EventLog::INFO_TYPE
|
19
19
|
}
|
20
20
|
|
21
21
|
def initialize
|
@@ -23,8 +23,8 @@ if Steno::Sink::WINDOWS
|
|
23
23
|
@eventlog = nil
|
24
24
|
end
|
25
25
|
|
26
|
-
def open
|
27
|
-
@eventlog = Win32::EventLog
|
26
|
+
def open
|
27
|
+
@eventlog = Win32::EventLog.open('Application')
|
28
28
|
end
|
29
29
|
|
30
30
|
def add_record(record)
|
@@ -32,15 +32,14 @@ if Steno::Sink::WINDOWS
|
|
32
32
|
pri = LOG_LEVEL_MAP[record.log_level]
|
33
33
|
|
34
34
|
@eventlog.report_event(
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
source: 'CloudFoundry',
|
36
|
+
event_type: pri,
|
37
|
+
data: msg
|
38
38
|
)
|
39
39
|
end
|
40
40
|
|
41
41
|
def flush
|
42
42
|
nil
|
43
43
|
end
|
44
|
-
|
45
44
|
end
|
46
|
-
end
|
45
|
+
end
|
data/lib/steno/sink/fluentd.rb
CHANGED
@@ -6,7 +6,6 @@ require 'fluent-logger'
|
|
6
6
|
# and fluent-logger at https://github.com/fluent/fluent-logger-ruby
|
7
7
|
#
|
8
8
|
class Steno::Sink::Fluentd < Steno::Sink::Base
|
9
|
-
|
10
9
|
# @param [Hash] opts Key :tag_prefix tag prefix of fluent logs (default: steno)
|
11
10
|
# Key :host fluentd host (default: 127.0.0.1)
|
12
11
|
# Key :port fluentd port (deafult: 24224)
|
@@ -14,10 +13,10 @@ class Steno::Sink::Fluentd < Steno::Sink::Base
|
|
14
13
|
def initialize(opts = {})
|
15
14
|
super
|
16
15
|
|
17
|
-
@fluentd = Fluent::Logger::FluentLogger.new(opts[:tag_prefix] ||
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
@fluentd = Fluent::Logger::FluentLogger.new(opts[:tag_prefix] || 'steno',
|
17
|
+
host: opts[:host] || '127.0.0.1',
|
18
|
+
port: opts[:port] || 24_224,
|
19
|
+
buffer_limit: opts[:buffer_limit] || Fluent::Logger::FluentLogger::BUFFER_LIMIT)
|
21
20
|
@io_lock = Mutex.new
|
22
21
|
end
|
23
22
|
|
data/lib/steno/sink/io.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'steno/sink/base'
|
2
2
|
|
3
3
|
module Steno
|
4
4
|
module Sink
|
@@ -16,15 +16,13 @@ class Steno::Sink::IO < Steno::Sink::Base
|
|
16
16
|
# @return [Steno::Sink::IO]
|
17
17
|
def for_file(path, opts = {})
|
18
18
|
autoflush = true
|
19
|
-
if opts.include?(:autoflush)
|
20
|
-
autoflush = opts[:autoflush]
|
21
|
-
end
|
19
|
+
autoflush = opts[:autoflush] if opts.include?(:autoflush)
|
22
20
|
|
23
|
-
io = File.open(path,
|
21
|
+
io = File.open(path, 'a+')
|
24
22
|
|
25
23
|
io.sync = autoflush
|
26
24
|
|
27
|
-
new(io, :
|
25
|
+
new(io, max_retries: opts[:max_retries])
|
28
26
|
end
|
29
27
|
end
|
30
28
|
|
@@ -52,12 +50,10 @@ class Steno::Sink::IO < Steno::Sink::Base
|
|
52
50
|
begin
|
53
51
|
@io.write(bytes)
|
54
52
|
rescue IOError => e
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
raise e
|
60
|
-
end
|
53
|
+
raise e unless retries < @max_retries
|
54
|
+
|
55
|
+
retries += 1
|
56
|
+
retry
|
61
57
|
end
|
62
58
|
end
|
63
59
|
|
data/lib/steno/sink/syslog.rb
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
unless Steno::Sink::WINDOWS
|
2
|
-
require
|
2
|
+
require 'steno/sink/base'
|
3
3
|
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
4
|
+
require 'singleton'
|
5
|
+
require 'thread'
|
6
|
+
require 'syslog/logger'
|
7
7
|
|
8
8
|
class Steno::Sink::Syslog < Steno::Sink::Base
|
9
9
|
include Singleton
|
10
10
|
|
11
11
|
MAX_MESSAGE_SIZE = 1024 * 3
|
12
|
-
TRUNCATE_POSTFIX =
|
12
|
+
TRUNCATE_POSTFIX = '...'
|
13
13
|
|
14
14
|
LOG_LEVEL_MAP = {
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
15
|
+
fatal: Syslog::LOG_CRIT,
|
16
|
+
error: Syslog::LOG_ERR,
|
17
|
+
warn: Syslog::LOG_WARNING,
|
18
|
+
info: Syslog::LOG_INFO,
|
19
|
+
debug: Syslog::LOG_DEBUG,
|
20
|
+
debug1: Syslog::LOG_DEBUG,
|
21
|
+
debug2: Syslog::LOG_DEBUG
|
22
22
|
}
|
23
23
|
|
24
24
|
def initialize
|
@@ -30,14 +30,18 @@ unless Steno::Sink::WINDOWS
|
|
30
30
|
|
31
31
|
def open(identity)
|
32
32
|
@identity = identity
|
33
|
-
|
33
|
+
|
34
|
+
Syslog::Logger.new(@identity)
|
35
|
+
@syslog = Syslog::Logger.syslog
|
34
36
|
end
|
35
37
|
|
36
38
|
def add_record(record)
|
39
|
+
return if record.log_level == :off
|
40
|
+
|
37
41
|
record = truncate_record(record)
|
38
42
|
msg = @codec.encode_record(record)
|
39
43
|
pri = LOG_LEVEL_MAP[record.log_level]
|
40
|
-
@syslog_lock.synchronize { @syslog.log(pri,
|
44
|
+
@syslog_lock.synchronize { @syslog.log(pri, '%s', msg) }
|
41
45
|
end
|
42
46
|
|
43
47
|
def flush
|
@@ -57,4 +61,4 @@ unless Steno::Sink::WINDOWS
|
|
57
61
|
record.data)
|
58
62
|
end
|
59
63
|
end
|
60
|
-
end
|
64
|
+
end
|
data/lib/steno/sink.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
1
|
+
require 'steno/sink/base'
|
2
|
+
require 'steno/sink/io'
|
3
|
+
require 'steno/sink/syslog'
|
4
|
+
require 'steno/sink/fluentd'
|
5
|
+
require 'steno/sink/counter'
|
6
|
+
require 'steno/sink/eventlog'
|
data/lib/steno/tagged_logger.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
|
-
require
|
1
|
+
require 'steno/logger'
|
2
2
|
|
3
3
|
module Steno
|
4
4
|
end
|
5
5
|
|
6
6
|
# Provides a proxy that allows persistent user data
|
7
7
|
class Steno::TaggedLogger
|
8
|
-
|
9
8
|
attr_reader :proxied_logger
|
10
9
|
attr_accessor :user_data
|
11
10
|
|
@@ -18,7 +17,7 @@ class Steno::TaggedLogger
|
|
18
17
|
end
|
19
18
|
|
20
19
|
def define_logf_method(name)
|
21
|
-
define_method(name.to_s +
|
20
|
+
define_method(name.to_s + 'f') { |fmt, *args| log(name, fmt % args) }
|
22
21
|
end
|
23
22
|
end
|
24
23
|
|
data/lib/steno/version.rb
CHANGED
data/lib/steno.rb
CHANGED
@@ -1,21 +1,19 @@
|
|
1
|
-
require
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
1
|
+
require 'thread'
|
2
|
+
|
3
|
+
require 'steno/codec'
|
4
|
+
require 'steno/config'
|
5
|
+
require 'steno/context'
|
6
|
+
require 'steno/errors'
|
7
|
+
require 'steno/log_level'
|
8
|
+
require 'steno/logger'
|
9
|
+
require 'steno/tagged_logger'
|
10
|
+
require 'steno/record'
|
11
|
+
require 'steno/sink'
|
12
|
+
require 'steno/version'
|
13
13
|
|
14
14
|
module Steno
|
15
15
|
class << self
|
16
|
-
|
17
|
-
attr_reader :config
|
18
|
-
attr_reader :logger_regexp
|
16
|
+
attr_reader :config, :logger_regexp
|
19
17
|
|
20
18
|
# Initializes the logging system. This must be called exactly once before
|
21
19
|
# attempting to use any Steno class methods.
|
@@ -48,8 +46,8 @@ module Steno
|
|
48
46
|
level = compute_level(name)
|
49
47
|
|
50
48
|
logger = Steno::Logger.new(name, @config.sinks,
|
51
|
-
:
|
52
|
-
:
|
49
|
+
level: level,
|
50
|
+
context: @config.context)
|
53
51
|
|
54
52
|
@loggers[name] = logger
|
55
53
|
end
|
@@ -92,9 +90,7 @@ module Steno
|
|
92
90
|
return if @logger_regexp.nil?
|
93
91
|
|
94
92
|
@loggers.each do |name, logger|
|
95
|
-
if name =~ @logger_regexp
|
96
|
-
logger.level = @config.default_log_level
|
97
|
-
end
|
93
|
+
logger.level = @config.default_log_level if name =~ @logger_regexp
|
98
94
|
end
|
99
95
|
|
100
96
|
@logger_regexp = nil
|
@@ -104,7 +100,6 @@ module Steno
|
|
104
100
|
nil
|
105
101
|
end
|
106
102
|
|
107
|
-
|
108
103
|
# @return [Hash] Map of logger name => level
|
109
104
|
def logger_level_snapshot
|
110
105
|
@loggers_lock.synchronize do
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/barrier.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
|
2
|
-
it
|
3
|
-
context.data[
|
1
|
+
shared_examples 'steno context' do
|
2
|
+
it 'supports clearing context local data' do
|
3
|
+
context.data['test'] = 'value'
|
4
4
|
context.clear
|
5
|
-
context.data[
|
5
|
+
expect(context.data['test']).to be_nil
|
6
6
|
end
|
7
7
|
end
|