hatchet 0.2.9 → 0.2.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e793530225b72cad969ca6ff304f764b79342362
4
- data.tar.gz: 31f388e0a9b3304f57c9c9bb0ab0c372aef1fdd9
3
+ metadata.gz: 813a27c38ca53b1f1e669f206c7ba049473b4896
4
+ data.tar.gz: f805a3480f1075f27109d9063ab37bc6f277b77d
5
5
  SHA512:
6
- metadata.gz: 1d690faeaa1369d6d29b9fc78c194793de3f22124a1d287f21dba0ac39bc55a03ad8fc158b912dcb1cc06073e628fd0b10a7ebfdda7d54055694251487983d61
7
- data.tar.gz: 30bde7326ac9c50ca3a885c49487647aafbb93915418645fbed0b2099553fbf030f015cd210db34c29edf6884a4c85bb7033c4b58e910d6c82f0250f657a89a5
6
+ metadata.gz: 6dfe4975156aa901ce3fca6a9664b8cc105d2a7ad104c73da53bf60acc9ded2fa567d989f9ec42d91f78d9796ae574efd6b0946c55eca179364df17930f1f2d5
7
+ data.tar.gz: b2bfbabbd0073e546894474efeff7d7aec1d0c9e0c2e30078870be7fb345fbc49b301539a44f0f505f898732847ef4036fc664a1a2b882bf46f4ee9be09567bb
data/RELEASE.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # Release notes
2
2
 
3
+ ## 0.2.10
4
+
5
+ * Introduced the ability to filter backtraces
6
+
7
+ Example:
8
+
9
+ configuration.configure do |config|
10
+ config.backtrace_filter '/applications/my_app/releases/current' => '[ROOT]'
11
+ end
12
+
13
+ Will filter a backtrace line like:
14
+
15
+ /applications/my_app/releases/current/lib/example.rb:42:in `main'
16
+
17
+ Into:
18
+
19
+ [ROOT]/lib/example.rb:42:in `main'
20
+
3
21
  ## 0.2.9
4
22
 
5
23
  * Fixed a bug where if you specified appender-specific log levels without
@@ -1,5 +1,4 @@
1
1
  # -*- encoding: utf-8 -*-
2
-
3
2
  require_relative 'hatchet/level_manager'
4
3
  require_relative 'hatchet/backtrace_formatter'
5
4
  require_relative 'hatchet/thread_name_formatter'
@@ -20,6 +20,34 @@ module Hatchet
20
20
  reset!
21
21
  end
22
22
 
23
+ # Public: Adds backtrace filters provided in the form of a Hash.
24
+ #
25
+ # Each line of the backtrace starting with a key is replaced by its
26
+ # corresponding value.
27
+ #
28
+ # Example
29
+ #
30
+ # configuration.configure do |config|
31
+ # config.backtrace_filter '/applications/my_app/releases/current' => '$ROOT'
32
+ # end
33
+ #
34
+ # Will filter a backtrace line like:
35
+ #
36
+ # /applications/my_app/releases/current/lib/example.rb:42:in `main'
37
+ #
38
+ # Into:
39
+ #
40
+ # $ROOT/lib/example.rb:42:in `main'
41
+ #
42
+ # Returns nothing.
43
+ #
44
+ def backtrace_filter(filters = nil)
45
+ @backtrace_filters.merge!(filters) if filters
46
+ @backtrace_filters
47
+ end
48
+
49
+ alias_method :backtrace_filters, :backtrace_filter
50
+
23
51
  # Public: Returns the default formatter given to the appenders that have not
24
52
  # had their formatter explicitly set.
25
53
  #
@@ -39,6 +67,7 @@ module Hatchet
39
67
  # Public: Resets the configuration's internal state to the defaults.
40
68
  #
41
69
  def reset!
70
+ @backtrace_filters = {}
42
71
  @levels = { nil => :info }
43
72
  @appenders = []
44
73
 
@@ -388,15 +388,15 @@ module Hatchet
388
388
  @configuration ||= Hatchet.configuration
389
389
  @ndc ||= Hatchet::NestedDiagnosticContext.current
390
390
 
391
- msg = Message.new(ndc: @ndc.context.clone, message: message, error: error, &block)
391
+ msg = Message.new(ndc: @ndc.context.clone, message: message, error: error, backtrace_filters: @configuration.backtrace_filters, &block)
392
392
 
393
393
  @configuration.appenders.each do |appender|
394
394
  if appender.enabled?(level, @context)
395
395
  begin
396
396
  appender.add(level, @context, msg)
397
397
  rescue => e
398
- puts "Failed to log message for #{@context} with appender #{appender} - #{level} - #{msg}\n"
399
- puts "#{e}\n"
398
+ STDERR.puts "Failed to log message for #{@context} with appender #{appender} - #{level} - #{msg}\n"
399
+ STDERR.puts "#{e}\n"
400
400
  end
401
401
  end
402
402
  end
@@ -1,5 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
+ require 'delegate'
4
+
3
5
  module Hatchet
4
6
 
5
7
  # Public: Class for wrapping message strings and blocks in a way that means
@@ -15,6 +17,28 @@ module Hatchet
15
17
  #
16
18
  class Message
17
19
 
20
+ class ErrorDecorator < SimpleDelegator
21
+ def initialize(error, backtrace_filters)
22
+ super(error)
23
+ @error = error
24
+ @backtrace_filters = backtrace_filters
25
+ end
26
+
27
+ def backtrace
28
+ @backtrace ||= @error.backtrace.map { |line| __filtered_line(line) }
29
+ end
30
+
31
+ def __filtered_line(line)
32
+ @backtrace_filters.each do |prefixes, replacement|
33
+ Array[*prefixes].each do |prefix|
34
+ return replacement + line[prefix.length..-1] if line.start_with?(prefix)
35
+ end
36
+ end
37
+
38
+ line
39
+ end
40
+ end
41
+
18
42
  # Public: Gets the error associated with this message, if given.
19
43
  #
20
44
  attr_reader :error
@@ -65,12 +89,13 @@ module Hatchet
65
89
  @message = args[:message] unless block
66
90
  else
67
91
  # Otherwise assume the old format and coerce args accordingly.
68
- @ndc = []
69
- @error = error
92
+ @ndc = []
93
+ @error = error
70
94
  @message = args unless block
71
95
  end
72
96
 
73
- @block = block
97
+ @error = ErrorDecorator.new(@error, args[:backtrace_filters]) if @error && args[:backtrace_filters]
98
+ @block = block
74
99
  end
75
100
 
76
101
  # Public: Returns the String representation of the message.
@@ -4,6 +4,6 @@ module Hatchet
4
4
 
5
5
  # Public: The version of Hatchet.
6
6
  #
7
- VERSION = '0.2.9'
7
+ VERSION = '0.2.10'
8
8
 
9
9
  end
@@ -60,7 +60,8 @@ describe HatchetLogger do
60
60
  subject.send level, message, error
61
61
  received = appender.messages.last
62
62
 
63
- assert error == received.message.error
63
+ # Use __getobj__ as wrapped by delegator
64
+ assert error == received.message.error.__getobj__
64
65
  end
65
66
  end
66
67
  end
@@ -105,6 +105,58 @@ describe Message do
105
105
  end
106
106
  end
107
107
 
108
+ describe 'filtering backtraces' do
109
+ def generate_error
110
+ raise 'Example failure'
111
+ rescue => e
112
+ e
113
+ end
114
+
115
+ let(:dirname) { File.dirname(__FILE__) }
116
+ let(:error) { generate_error }
117
+
118
+ let(:subject) do
119
+ Message.new(error: generate_error, backtrace_filters: backtrace_filters)
120
+ end
121
+
122
+ require 'rbconfig'
123
+
124
+ describe 'string keys' do
125
+ let(:backtrace_filters) do
126
+ {
127
+ dirname => '$DIRNAME',
128
+ RbConfig::CONFIG['rubylibdir'] => '$RUBYLIBDIR',
129
+ }
130
+ end
131
+
132
+ it 'replaces the matching keys' do
133
+ backtrace = subject.error.backtrace
134
+
135
+ backtrace_filters.each do |prefix, replacement|
136
+ refute backtrace.find { |line| line.start_with? prefix }, "Backtrace should not have a line starting '#{prefix}'\n\t#{backtrace.join("\n\t")}"
137
+ end
138
+ end
139
+ end
140
+
141
+ describe 'array keys' do
142
+ let(:backtrace_filters) do
143
+ {
144
+ [dirname, RbConfig::CONFIG['rubylibdir']] => '$REPLACEMENT',
145
+ }
146
+ end
147
+
148
+ it 'replaces the matching keys' do
149
+ backtrace = subject.error.backtrace
150
+
151
+ backtrace_filters.each do |prefixes, replacement|
152
+ prefixes.each do |prefix|
153
+ refute backtrace.find { |line| line.start_with? prefix }, "Backtrace should not have a line starting '#{prefix}'\n\t#{backtrace.join("\n\t")}"
154
+ end
155
+ end
156
+ end
157
+ end
158
+ end
159
+
108
160
  if ENV["BENCH"] then
109
161
  describe 'benchmarks' do
110
162
  let(:subject) { Message.new(ndc: [], message: 'Evaluated') }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hatchet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9
4
+ version: 0.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garry Shutler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-15 00:00:00.000000000 Z
11
+ date: 2014-08-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Logging library that provides the ability to add class/module specific
14
14
  filters