steno 1.3.4 → 1.3.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +5 -5
  2. data/NOTICE +14 -0
  3. data/Rakefile +6 -7
  4. data/bin/steno-prettify +24 -25
  5. data/lib/steno/codec/base.rb +1 -1
  6. data/lib/steno/codec/json.rb +16 -19
  7. data/lib/steno/codec.rb +2 -2
  8. data/lib/steno/config.rb +22 -33
  9. data/lib/steno/context.rb +3 -3
  10. data/lib/steno/json_prettifier.rb +30 -29
  11. data/lib/steno/log_level.rb +1 -2
  12. data/lib/steno/logger.rb +22 -26
  13. data/lib/steno/record.rb +5 -15
  14. data/lib/steno/sink/base.rb +2 -3
  15. data/lib/steno/sink/counter.rb +4 -8
  16. data/lib/steno/sink/eventlog.rb +16 -17
  17. data/lib/steno/sink/fluentd.rb +4 -5
  18. data/lib/steno/sink/io.rb +8 -12
  19. data/lib/steno/sink/syslog.rb +15 -13
  20. data/lib/steno/sink.rb +6 -6
  21. data/lib/steno/tagged_logger.rb +2 -3
  22. data/lib/steno/version.rb +1 -1
  23. data/lib/steno.rb +16 -21
  24. data/spec/spec_helper.rb +4 -4
  25. data/spec/support/barrier.rb +2 -2
  26. data/spec/support/shared_context_specs.rb +4 -4
  27. data/spec/unit/config_spec.rb +87 -94
  28. data/spec/unit/context_spec.rb +17 -17
  29. data/spec/unit/core_ext_spec.rb +11 -11
  30. data/spec/unit/json_codec_spec.rb +26 -26
  31. data/spec/unit/json_prettifier_spec.rb +22 -22
  32. data/spec/unit/log_level_spec.rb +5 -6
  33. data/spec/unit/logger_spec.rb +39 -39
  34. data/spec/unit/record_spec.rb +10 -10
  35. data/spec/unit/sink/counter_spec.rb +7 -7
  36. data/spec/unit/sink/eventlog_spec.rb +14 -15
  37. data/spec/unit/sink/fluentd_spec.rb +26 -26
  38. data/spec/unit/sink/io_spec.rb +49 -49
  39. data/spec/unit/sink/syslog_spec.rb +43 -19
  40. data/spec/unit/steno_spec.rb +24 -24
  41. data/spec/unit/tagged_logger_spec.rb +12 -12
  42. data/steno.gemspec +28 -27
  43. metadata +61 -38
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 9ae74f2bde35a6d8f17503cb1cd7bff4eb458b78
4
- data.tar.gz: a3939b000fb9d0aaf3c7ade1231008d24e212a6e
2
+ SHA256:
3
+ metadata.gz: 288b5abe607dd9f6bd602815ebc1886736196f0b0aa826d81e1c9cbc3785e142
4
+ data.tar.gz: 3684b30c332791771282d0cc35a3bd971ca4d709b388718727062c27ba255560
5
5
  SHA512:
6
- metadata.gz: c12db2c17088b015b24cbb6744d66b9ad7880a93c302b2dd16a0f7d896c38342677cf935f9b478f66c0d93988677bda9611c865af2a6aaa4baedb91bd88f3d1c
7
- data.tar.gz: 23b73d7a6eb69d64d1e33292ba3a97ae5a5dcc617e9d09112a2e0e03c74abbfd941909a3622b120832ade5e9ee80aa35fe8f7dbe3fcc74cde74c864aa5c7f5f0
6
+ metadata.gz: d92167feac3ae2409d8692c13aabe84c66ca442d6573e68bbdeb76484ecde81c62bd28acc85bb3b6ea41f88ebccecea2ac62a3da2e3dd31492ed62bcf5d4ce83
7
+ data.tar.gz: cfbb78af6e114eeaf121d6ae1ca7a9b84bd625f1eedbf45c1beeb74706504134f4fc76207d26fb78bfdf30260d55a1dcbb83fb1898cab7b047fbacbd19164455
data/NOTICE ADDED
@@ -0,0 +1,14 @@
1
+ Steno
2
+
3
+ Copyright (c) 2015 - Present CloudFoundry.org Foundation, Inc. All Rights Reserved.
4
+
5
+ This project contains software that is Copyright (c) 2012-2015 Pivotal Software, Inc.
6
+
7
+ Other copyright notices for portions of this software are listed in the LICENSE file.
8
+
9
+ This product is licensed to you under the Apache License, Version 2.0 (the "License").
10
+ You may not use this product except in compliance with the License.
11
+
12
+ This product may include a number of subcomponents with separate copyright notices
13
+ and license terms. Your use of these subcomponents is subject to the terms and
14
+ conditions of the subcomponent's license, as noted in the LICENSE file.
data/Rakefile CHANGED
@@ -1,15 +1,14 @@
1
1
  #!/usr/bin/env rake
2
- require "rspec/core/rake_task"
2
+ require 'rspec/core/rake_task'
3
3
 
4
- task :default => :spec
4
+ task default: :spec
5
5
 
6
- desc "Run all specs"
7
- RSpec::Core::RakeTask.new("spec") do |t|
6
+ desc 'Run all specs'
7
+ RSpec::Core::RakeTask.new('spec') do |t|
8
8
  t.rspec_opts = %w[--color --format documentation]
9
9
  end
10
10
 
11
- desc "Run all specs and provide output for ci"
12
- RSpec::Core::RakeTask.new("spec:ci" => "ci:setup:rspec") do |t|
11
+ desc 'Run all specs and provide output for ci'
12
+ RSpec::Core::RakeTask.new('spec:ci' => 'ci:setup:rspec') do |t|
13
13
  t.rspec_opts = %w[--no-color --format documentation]
14
14
  end
15
-
data/bin/steno-prettify CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "optparse"
4
- require "yajl"
3
+ require 'optparse'
4
+ require 'yajl'
5
5
 
6
- require "steno/json_prettifier"
6
+ require 'steno/json_prettifier'
7
7
 
8
- Signal.trap("INT") { exit }
8
+ Signal.trap('INT') { exit }
9
9
 
10
10
  def prettify_io(io, prettifier, ignore_parse_error = false)
11
11
  lineno = 1
@@ -25,7 +25,7 @@ def prettify_io(io, prettifier, ignore_parse_error = false)
25
25
  if ignore_parse_error
26
26
  print line
27
27
  else
28
- STDERR.puts "steno-prettify: Malformed json at line #{lineno}, '#{line.strip}'"
28
+ warn "steno-prettify: Malformed json at line #{lineno}, '#{line.strip}'"
29
29
  end
30
30
  end
31
31
 
@@ -35,14 +35,13 @@ end
35
35
 
36
36
  def prettify_file(path, prettifier, ignore_parse_error = false)
37
37
  begin
38
- f = File.open(path, "r")
39
- rescue => e
40
- STDERR.puts "steno-prettify: Failed opening '#{path}', #{e}"
38
+ f = File.open(path, 'r')
39
+ rescue StandardError => e
40
+ warn "steno-prettify: Failed opening '#{path}', #{e}"
41
41
  return
42
42
  end
43
43
 
44
44
  prettify_io(f, prettifier, ignore_parse_error)
45
-
46
45
  ensure
47
46
  f.close if f
48
47
  end
@@ -51,33 +50,33 @@ excluded_fields = []
51
50
  ignore_parse_error = false
52
51
 
53
52
  option_parser = OptionParser.new do |op|
54
- op.banner =<<EOT
55
- Usage: steno-prettify [OPTS] [FILE...]
53
+ op.banner = <<~EOT
54
+ Usage: steno-prettify [OPTS] [FILE...]
56
55
 
57
- Parses json formatted log lines from FILE(s), or stdin,
58
- and displays a more human friendly version of each line to stdout.
56
+ Parses json formatted log lines from FILE(s), or stdin,
57
+ and displays a more human friendly version of each line to stdout.
59
58
 
60
- Examples (shamelessly stolen from `man cat`):
59
+ Examples (shamelessly stolen from `man cat`):
61
60
 
62
- steno-prettify f - g
63
- Prettify f's contents, then standard input, then g's contents.
61
+ steno-prettify f - g
62
+ Prettify f's contents, then standard input, then g's contents.
64
63
 
65
- steno-prettify
66
- Prettify contents of stdin.
64
+ steno-prettify
65
+ Prettify contents of stdin.
67
66
 
68
- Options:
69
- EOT
67
+ Options:
68
+ EOT
70
69
 
71
- op.on("-h", "--help", "Display help") do
70
+ op.on('-h', '--help', 'Display help') do
72
71
  puts op
73
72
  exit
74
73
  end
75
74
 
76
- op.on("-a", "--align", "Omit location and data in order to provide well-aligned logs") do
75
+ op.on('-a', '--align', 'Omit location and data in order to provide well-aligned logs') do
77
76
  excluded_fields = %w[location data]
78
77
  end
79
78
 
80
- op.on("-s", "--no-messages", "Donot complain about errors in parsing logs") do
79
+ op.on('-s', '--no-messages', 'Donot complain about errors in parsing logs') do
81
80
  ignore_parse_error = true
82
81
  end
83
82
  end
@@ -88,10 +87,10 @@ STDOUT.sync = true
88
87
  prettifier = Steno::JsonPrettifier.new(excluded_fields)
89
88
 
90
89
  inputs = ARGV.dup
91
- inputs << "-" if inputs.empty?
90
+ inputs << '-' if inputs.empty?
92
91
 
93
92
  inputs.each do |path|
94
- if path == "-"
93
+ if path == '-'
95
94
  prettify_io(STDIN, prettifier, ignore_parse_error)
96
95
  else
97
96
  prettify_file(path, prettifier, ignore_parse_error)
@@ -27,7 +27,7 @@ class Steno::Codec::Base
27
27
  if (ord_val > 31) && (ord_val < 127)
28
28
  c
29
29
  else
30
- "\\x%02x" % [ord_val]
30
+ format('\\x%02x', ord_val)
31
31
  end
32
32
  end.join
33
33
  end
@@ -1,6 +1,6 @@
1
- require "yajl"
1
+ require 'yajl'
2
2
 
3
- require "steno/codec/base"
3
+ require 'steno/codec/base'
4
4
 
5
5
  module Steno
6
6
  module Codec
@@ -8,7 +8,6 @@ module Steno
8
8
  end
9
9
 
10
10
  class Steno::Codec::Json < Steno::Codec::Base
11
-
12
11
  def initialize(opts = {})
13
12
  @iso8601_timestamps = opts[:iso8601_timestamps] || false
14
13
  end
@@ -19,28 +18,26 @@ class Steno::Codec::Json < Steno::Codec::Base
19
18
  record.message
20
19
  else
21
20
  # Treat the message as an arbitrary sequence of bytes.
22
- escape_nonprintable_ascii(record.message.dup.force_encoding("BINARY"))
21
+ escape_nonprintable_ascii(record.message.dup.force_encoding('BINARY'))
23
22
  end
24
23
 
25
24
  h = {
26
- "timestamp" => record.timestamp.to_f,
27
- "message" => msg,
28
- "log_level" => record.log_level.to_s,
29
- "source" => record.source,
30
- "data" => record.data,
31
- "thread_id" => record.thread_id,
32
- "fiber_id" => record.fiber_id,
33
- "process_id" => record.process_id,
34
- "file" => record.file,
35
- "lineno" => record.lineno,
36
- "method" => record.method,
25
+ 'timestamp' => record.timestamp.to_f,
26
+ 'message' => msg,
27
+ 'log_level' => record.log_level.to_s,
28
+ 'source' => record.source,
29
+ 'data' => record.data,
30
+ 'thread_id' => record.thread_id,
31
+ 'fiber_id' => record.fiber_id,
32
+ 'process_id' => record.process_id,
33
+ 'file' => record.file,
34
+ 'lineno' => record.lineno,
35
+ 'method' => record.method
37
36
  }
38
37
 
39
- if iso8601_timestamps?
40
- h["timestamp"] = Time.at(record.timestamp).utc.iso8601(6)
41
- end
38
+ h['timestamp'] = Time.at(record.timestamp).utc.iso8601(6) if iso8601_timestamps?
42
39
 
43
- Yajl::Encoder.encode(h) + "\n"
40
+ Yajl::Encoder.encode(h) + "\n"
44
41
  end
45
42
 
46
43
  def iso8601_timestamps?
data/lib/steno/codec.rb CHANGED
@@ -1,2 +1,2 @@
1
- require "steno/codec/base"
2
- require "steno/codec/json"
1
+ require 'steno/codec/base'
2
+ require 'steno/codec/json'
data/lib/steno/config.rb CHANGED
@@ -1,9 +1,9 @@
1
- require "yaml"
1
+ require 'yaml'
2
2
 
3
- require "steno/codec"
4
- require "steno/context"
5
- require "steno/logger"
6
- require "steno/sink"
3
+ require 'steno/codec'
4
+ require 'steno/context'
5
+ require 'steno/logger'
6
+ require 'steno/sink'
7
7
 
8
8
  module Steno
9
9
  end
@@ -23,7 +23,7 @@ class Steno::Config
23
23
  # @return [Steno::Config]
24
24
  def from_file(path, overrides = {})
25
25
  h = YAML.load_file(path)
26
- h = h["logging"] || {}
26
+ h = h['logging'] || {}
27
27
  new(to_config_hash(h).merge(overrides))
28
28
  end
29
29
 
@@ -37,17 +37,15 @@ class Steno::Config
37
37
 
38
38
  level = hash[:level] || hash[:default_log_level]
39
39
  opts = {
40
- :sinks => [],
41
- :default_log_level => level.nil? ? :info : level.to_sym
40
+ sinks: [],
41
+ default_log_level: level.nil? ? :info : level.to_sym
42
42
  }
43
43
 
44
- if hash[:iso8601_timestamps]
45
- opts[:codec] = Steno::Codec::Json.new(:iso8601_timestamps => true)
46
- end
44
+ opts[:codec] = Steno::Codec::Json.new(iso8601_timestamps: true) if hash[:iso8601_timestamps]
47
45
 
48
46
  if hash[:file]
49
47
  max_retries = hash[:max_retries]
50
- opts[:sinks] << Steno::Sink::IO.for_file(hash[:file], :max_retries => max_retries)
48
+ opts[:sinks] << Steno::Sink::IO.for_file(hash[:file], max_retries: max_retries)
51
49
  end
52
50
 
53
51
  if Steno::Sink::WINDOWS
@@ -55,20 +53,14 @@ class Steno::Config
55
53
  Steno::Sink::Eventlog.instance.open(hash[:eventlog])
56
54
  opts[:sinks] << Steno::Sink::Eventlog.instance
57
55
  end
58
- else
59
- if hash[:syslog]
60
- Steno::Sink::Syslog.instance.open(hash[:syslog])
61
- opts[:sinks] << Steno::Sink::Syslog.instance
62
- end
56
+ elsif hash[:syslog]
57
+ Steno::Sink::Syslog.instance.open(hash[:syslog])
58
+ opts[:sinks] << Steno::Sink::Syslog.instance
63
59
  end
64
60
 
65
- if hash[:fluentd]
66
- opts[:sinks] << Steno::Sink::Fluentd.new(hash[:fluentd])
67
- end
61
+ opts[:sinks] << Steno::Sink::Fluentd.new(hash[:fluentd]) if hash[:fluentd]
68
62
 
69
- if opts[:sinks].empty?
70
- opts[:sinks] << Steno::Sink::IO.new(STDOUT)
71
- end
63
+ opts[:sinks] << Steno::Sink::IO.new(STDOUT) if opts[:sinks].empty?
72
64
 
73
65
  opts
74
66
  end
@@ -78,23 +70,20 @@ class Steno::Config
78
70
  end
79
71
  end
80
72
 
81
- attr_reader :sinks
82
- attr_reader :codec
83
- attr_reader :context
84
- attr_reader :default_log_level
73
+ attr_reader :sinks, :codec, :context, :default_log_level
85
74
 
86
75
  def initialize(opts = {})
87
76
  @sinks = opts[:sinks] || []
88
77
  @codec = opts[:codec] || Steno::Codec::Json.new
89
- @context = opts[:context] ||Steno::Context::Null.new
78
+ @context = opts[:context] || Steno::Context::Null.new
90
79
 
91
80
  @sinks.each { |sink| sink.codec = @codec }
92
81
 
93
- if opts[:default_log_level]
94
- @default_log_level = opts[:default_log_level].to_sym
95
- else
96
- @default_log_level = :info
97
- end
82
+ @default_log_level = if opts[:default_log_level]
83
+ opts[:default_log_level].to_sym
84
+ else
85
+ :info
86
+ end
98
87
  end
99
88
 
100
89
  private_class_method :symbolize_keys
data/lib/steno/context.rb CHANGED
@@ -1,5 +1,5 @@
1
- require "fiber"
2
- require "thread"
1
+ require 'fiber'
2
+ require 'thread'
3
3
 
4
4
  class Fiber
5
5
  def __steno_context_data__
@@ -36,7 +36,7 @@ module Steno::Context
36
36
  end
37
37
 
38
38
  class ThreadLocal < Base
39
- THREAD_LOCAL_KEY = "__steno_locals__"
39
+ THREAD_LOCAL_KEY = '__steno_locals__'
40
40
 
41
41
  def data
42
42
  Thread.current[THREAD_LOCAL_KEY] ||= {}
@@ -1,6 +1,6 @@
1
- require "digest/md5"
2
- require "set"
3
- require "yajl"
1
+ require 'digest/md5'
2
+ require 'set'
3
+ require 'yajl'
4
4
 
5
5
  module Steno
6
6
  end
@@ -24,7 +24,7 @@ class Steno::JsonPrettifier
24
24
  end
25
25
 
26
26
  def initialize(excluded_fields = [])
27
- @time_format = "%Y-%m-%d %H:%M:%S.%6N"
27
+ @time_format = '%Y-%m-%d %H:%M:%S.%6N'
28
28
  @excluded_fields = Set.new(excluded_fields)
29
29
  @max_src_len = MIN_COL_WIDTH
30
30
  end
@@ -49,7 +49,7 @@ class Steno::JsonPrettifier
49
49
  next if @excluded_fields.include?(field_name)
50
50
 
51
51
  exists = nil
52
- pred_meth = "check_#{field_name}".to_sym
52
+ pred_meth = :"check_#{field_name}"
53
53
  if respond_to?(pred_meth, true)
54
54
  exists = send(pred_meth, record)
55
55
  elsif record.respond_to?(:has_key?)
@@ -59,35 +59,35 @@ class Steno::JsonPrettifier
59
59
  raise ParseError, msg
60
60
  end
61
61
 
62
- if exists
63
- fields << send("format_#{field_name}".to_sym, record)
64
- else
65
- fields << "-"
66
- end
62
+ fields << if exists
63
+ send(:"format_#{field_name}", record)
64
+ else
65
+ '-'
66
+ end
67
67
  end
68
68
 
69
- fields.join(" ") + "\n"
69
+ fields.join(' ') + "\n"
70
70
  end
71
71
 
72
72
  def format_timestamp(record)
73
- Time.at(record["timestamp"]).strftime(@time_format)
73
+ Time.at(record['timestamp']).strftime(@time_format)
74
74
  end
75
75
 
76
76
  def format_source(record)
77
- @max_src_len = [@max_src_len, record["source"].length].max
78
- record["source"].ljust(@max_src_len)
77
+ @max_src_len = [@max_src_len, record['source'].length].max
78
+ record['source'].ljust(@max_src_len)
79
79
  end
80
80
 
81
81
  def format_process_id(record)
82
- "pid=%-5s" % [record["process_id"]]
82
+ format('pid=%-5s', record['process_id'])
83
83
  end
84
84
 
85
85
  def format_thread_id(record)
86
- "tid=%s" % [shortid(record["thread_id"])]
86
+ format('tid=%s', shortid(record['thread_id']))
87
87
  end
88
88
 
89
89
  def format_fiber_id(record)
90
- "fid=%s" % [shortid(record["fiber_id"])]
90
+ format('fid=%s', shortid(record['fiber_id']))
91
91
  end
92
92
 
93
93
  def check_location(record)
@@ -95,36 +95,37 @@ class Steno::JsonPrettifier
95
95
  end
96
96
 
97
97
  def format_location(record)
98
- parts = record["file"].split("/")
98
+ parts = record['file'].split('/')
99
99
 
100
100
  trimmed_filename = nil
101
- if parts.size == 1
102
- trimmed_filename = parts[0]
103
- else
104
- trimmed_filename = parts.slice(-2, 2).join("/")
105
- end
101
+ trimmed_filename = if parts.size == 1
102
+ parts[0]
103
+ else
104
+ parts.slice(-2, 2).join('/')
105
+ end
106
106
 
107
- "%s/%s:%s" % [trimmed_filename, record["method"], record["lineno"]]
107
+ format('%s/%s:%s', trimmed_filename, record['method'], record['lineno'])
108
108
  end
109
109
 
110
110
  def check_data(record)
111
- record["data"].is_a?(Hash)
111
+ record['data'].is_a?(Hash)
112
112
  end
113
113
 
114
114
  def format_data(record)
115
- record["data"].map { |k, v| "#{k}=#{v}" }.join(",")
115
+ record['data'].map { |k, v| "#{k}=#{v}" }.join(',')
116
116
  end
117
117
 
118
118
  def format_log_level(record)
119
- "%7s" % [record["log_level"].upcase]
119
+ format('%7s', record['log_level'].upcase)
120
120
  end
121
121
 
122
122
  def format_message(record)
123
- "-- %s" % [record["message"]]
123
+ format('-- %s', record['message'])
124
124
  end
125
125
 
126
126
  def shortid(data)
127
- return "-" if data.nil?
127
+ return '-' if data.nil?
128
+
128
129
  digest = Digest::MD5.hexdigest(data.to_s)
129
130
  digest[0, 4]
130
131
  end
@@ -4,8 +4,7 @@ end
4
4
  class Steno::LogLevel
5
5
  include Comparable
6
6
 
7
- attr_reader :name
8
- attr_reader :priority
7
+ attr_reader :name, :priority
9
8
 
10
9
  # @param [String] name "info", "debug", etc.
11
10
  # @param [Integer] priority "info" > "debug", etc.
data/lib/steno/logger.rb CHANGED
@@ -1,22 +1,22 @@
1
- require "thread"
1
+ require 'thread'
2
2
 
3
- require "steno/errors"
4
- require "steno/log_level"
3
+ require 'steno/errors'
4
+ require 'steno/log_level'
5
5
 
6
6
  module Steno
7
7
  end
8
8
 
9
9
  class Steno::Logger
10
10
  LEVELS = {
11
- :off => Steno::LogLevel.new(:off, 0),
12
- :fatal => Steno::LogLevel.new(:fatal, 1),
13
- :error => Steno::LogLevel.new(:error, 5),
14
- :warn => Steno::LogLevel.new(:warn, 10),
15
- :info => Steno::LogLevel.new(:info, 15),
16
- :debug => Steno::LogLevel.new(:debug, 16),
17
- :debug1 => Steno::LogLevel.new(:debug1, 17),
18
- :debug2 => Steno::LogLevel.new(:debug2, 18),
19
- :all => Steno::LogLevel.new(:all, 30),
11
+ off: Steno::LogLevel.new(:off, 0),
12
+ fatal: Steno::LogLevel.new(:fatal, 1),
13
+ error: Steno::LogLevel.new(:error, 5),
14
+ warn: Steno::LogLevel.new(:warn, 10),
15
+ info: Steno::LogLevel.new(:info, 15),
16
+ debug: Steno::LogLevel.new(:debug, 16),
17
+ debug1: Steno::LogLevel.new(:debug1, 17),
18
+ debug2: Steno::LogLevel.new(:debug2, 18),
19
+ all: Steno::LogLevel.new(:all, 30)
20
20
  }
21
21
 
22
22
  class << self
@@ -28,19 +28,17 @@ class Steno::Logger
28
28
  end
29
29
 
30
30
  def define_logf_method(name)
31
- define_method(name.to_s + "f") { |fmt, *args| log(name, fmt % args) }
31
+ define_method(name.to_s + 'f') { |fmt, *args| log(name, fmt % args) }
32
32
  end
33
33
 
34
34
  def define_level_active_predicate(name)
35
- define_method(name.to_s + "?") { level_active?(name) }
35
+ define_method(name.to_s + '?') { level_active?(name) }
36
36
  end
37
37
 
38
38
  def lookup_level(name)
39
39
  level = LEVELS[name]
40
40
 
41
- if level.nil?
42
- raise Steno::Error.new("Unknown level: #{name}")
43
- end
41
+ raise Steno::Error.new("Unknown level: #{name}") if level.nil?
44
42
 
45
43
  level
46
44
  end
@@ -85,8 +83,6 @@ class Steno::Logger
85
83
  level = self.class.lookup_level(level_name)
86
84
 
87
85
  @min_level_lock.synchronize { @min_level = level }
88
-
89
- nil
90
86
  end
91
87
 
92
88
  # Returns the name of the current log level
@@ -113,7 +109,7 @@ class Steno::Logger
113
109
 
114
110
  # @return [nil]
115
111
  def log_exception(ex, user_data = {})
116
- warn("Caught exception: #{ex}", user_data.merge(:backtrace => ex.backtrace))
112
+ warn("Caught exception: #{ex}", user_data.merge(backtrace: ex.backtrace))
117
113
  end
118
114
 
119
115
  # Adds a record to the configured sinks.
@@ -123,7 +119,7 @@ class Steno::Logger
123
119
  # @param [Hash] user_data
124
120
  #
125
121
  # @return [nil]
126
- def log(level_name, message = nil, user_data = nil, &blk)
122
+ def log(level_name, message = nil, user_data = nil)
127
123
  return unless level_active?(level_name)
128
124
 
129
125
  message = yield if block_given?
@@ -153,18 +149,18 @@ class Steno::Logger
153
149
  private
154
150
 
155
151
  def parse_record_loc(callstack)
156
- file, lineno, method = nil, nil, nil
152
+ file = nil
153
+ lineno = nil
154
+ method = nil
157
155
 
158
156
  callstack.each do |frame|
159
157
  next if frame =~ /logger\.rb/
160
158
 
161
- file, lineno, method = frame.split(":")
159
+ file, lineno, method = frame.split(':')
162
160
 
163
161
  lineno = lineno.to_i
164
162
 
165
- if method =~ /in `([^']+)/
166
- method = $1
167
- end
163
+ method = ::Regexp.last_match(1) if method =~ /in `([^']+)/
168
164
 
169
165
  break
170
166
  end
data/lib/steno/record.rb CHANGED
@@ -1,22 +1,12 @@
1
- require "digest/md5"
2
- require "thread"
1
+ require 'digest/md5'
2
+ require 'thread'
3
3
 
4
4
  module Steno
5
5
  end
6
6
 
7
7
  class Steno::Record
8
-
9
- attr_reader :timestamp
10
- attr_reader :message
11
- attr_reader :log_level
12
- attr_reader :source
13
- attr_reader :data
14
- attr_reader :thread_id
15
- attr_reader :fiber_id
16
- attr_reader :process_id
17
- attr_reader :file
18
- attr_reader :lineno
19
- attr_reader :method
8
+ attr_reader :timestamp, :message, :log_level, :source, :data, :thread_id, :fiber_id, :process_id, :file, :lineno,
9
+ :method
20
10
 
21
11
  # @param [String] source Identifies message source.
22
12
  # @param [Symbol] log_level
@@ -25,7 +15,7 @@ class Steno::Record
25
15
  # Format is [<filename>, <lineno>, <method>].
26
16
  # @param [Hash] data User-supplied data
27
17
  def initialize(source, log_level, message, loc = [], data = {})
28
- raise "Log level must be a Symbol" unless log_level.is_a? Symbol
18
+ raise 'Log level must be a Symbol' unless log_level.is_a? Symbol
29
19
 
30
20
  @timestamp = Time.now
31
21
  @source = source
@@ -1,5 +1,5 @@
1
- require "rbconfig"
2
- require "thread"
1
+ require 'rbconfig'
2
+ require 'thread'
3
3
 
4
4
  module Steno
5
5
  module Sink
@@ -10,7 +10,6 @@ end
10
10
  # Sinks represent the final destination for log records. They abstract storage
11
11
  # mediums (like files) and transport layers (like sockets).
12
12
  class Steno::Sink::Base
13
-
14
13
  attr_accessor :codec
15
14
 
16
15
  # @param [Steno::Codec::Base] formatter Transforms log records to their