gray_logger 0.9.4 → 0.9.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.
data/lib/gray_logger.rb CHANGED
@@ -2,12 +2,12 @@ require 'singleton'
2
2
  require 'gelf'
3
3
 
4
4
  require 'gray_logger/support'
5
+ require 'gray_logger/bucket'
5
6
  require 'gray_logger/message'
6
- require 'gray_logger/message_store'
7
- require 'gray_logger/middleware'
7
+ require 'gray_logger/logger'
8
+ require 'gray_logger/rack'
8
9
  require 'gray_logger/helper_methods'
9
10
 
10
-
11
11
  if defined?(Rails)
12
12
  require 'gray_logger/rails_modules'
13
13
  require 'gray_logger/railtie' if defined?(Rails::Railtie)
@@ -0,0 +1,35 @@
1
+ module GrayLogger
2
+
3
+ class Bucket < Hash
4
+ alias_method :<<, :merge!
5
+
6
+ def to_message(name=nil)
7
+ self[:gray_logger_bucket] = name if name
8
+ GrayLogger::Message.new(self)
9
+ end
10
+
11
+ def append_to(field_name, value)
12
+ self[field_name.to_sym] ||= ""
13
+ self[field_name.to_sym] << "#{value}\n"
14
+ end
15
+
16
+ protected
17
+ def method_missing(method_name, args, &block)
18
+ if method_name.to_s.end_with?("=")
19
+
20
+ # def method_name=(value)
21
+ # self[:method_name] = value
22
+ # end
23
+ instance_eval <<-EOMEVAL
24
+ def #{method_name}(value)
25
+ self[:#{method_name.to_s.chop}] = value
26
+ end
27
+ EOMEVAL
28
+
29
+ send(method_name, args)
30
+ end
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -1,11 +1,7 @@
1
1
  module GrayLogger
2
2
  module HelperMethods
3
3
  def gray_logger
4
- if Rails.version.to_i >= 3
5
- env["rack.gray_logger.message_store"]
6
- else
7
- request.env["rack.gray_logger.message_store"]
8
- end
4
+ Rack::GrayLogger.proxy.gray_logger
9
5
  end
10
6
  protected :gray_logger
11
7
  end
@@ -0,0 +1,62 @@
1
+ module GrayLogger
2
+
3
+ class Logger < GELF::Logger
4
+ include ::GrayLogger::Support
5
+ attr_reader :buckets
6
+
7
+ def initialize(configuration={})
8
+ defaults = {
9
+ :size => "WAN",
10
+ :facility => "facility-not-defined"
11
+ }
12
+
13
+ config = symbolize_keys(configuration)
14
+ config = defaults.merge(config)
15
+
16
+ super(config.delete(:host), config.delete(:port), config.delete(:size), config)
17
+
18
+ @buckets = {}
19
+ end
20
+
21
+ # logger.after_request_log << {:my_field => 'field content'}
22
+ # logger.after_request_log.my_field = 'field content'
23
+ def after_request_log
24
+ bucket(:_request)
25
+ end
26
+
27
+ # logger.bucket(:my_bucket) << {:my_field => 'field content'}
28
+ # logger.bucket(:my_bucket).my_field = 'field content'
29
+ def bucket(name)
30
+ @buckets[name.to_sym] ||= GrayLogger::Bucket.new
31
+ end
32
+
33
+ # flush all buckets
34
+ def flush
35
+ @buckets.keys.each do |bucket_name|
36
+ flush_bucket(bucket_name)
37
+ end
38
+ end
39
+
40
+ # flush a specific bucket
41
+ def flush_bucket(name)
42
+ return false if get_bucket(name).nil?
43
+ message = get_bucket(name).to_message(name)
44
+ self.notify!(message)
45
+ @buckets.delete(name.to_sym)
46
+ end
47
+
48
+ def log_exception(exception)
49
+ if exception
50
+ after_request_log.short_message = "Error: #{exception.inspect}"
51
+ after_request_log.exception_backtrace = exception.backtrace.join("\n")
52
+ end
53
+ end
54
+
55
+ private
56
+ def get_bucket(name)
57
+ @buckets[name.to_sym]
58
+ end
59
+
60
+ end
61
+
62
+ end
@@ -1,5 +1,4 @@
1
1
  module GrayLogger
2
-
3
2
  class Message
4
3
  include GrayLogger::Support
5
4
 
@@ -0,0 +1,100 @@
1
+ module Rack
2
+ module GrayLogger
3
+ class Middleware
4
+ include ::GrayLogger::Support
5
+
6
+ attr_accessor :gray_logger
7
+
8
+ def initialize(app, options={})
9
+ @app = app
10
+
11
+ configuration = symbolize_keys(options.delete(:configuration))
12
+ self.gray_logger = ::GrayLogger::Logger.new(configuration)
13
+
14
+ ::Rack::GrayLogger.proxy.gray_logger = gray_logger if ::Rack::GrayLogger.proxy
15
+ end
16
+
17
+ def call(env)
18
+
19
+ begin
20
+ status, headers, body = @app.call(env)
21
+ rescue => e
22
+ gray_logger.log_exception(e)
23
+ raise
24
+ ensure
25
+ req = Rack::Request.new(env)
26
+ gray_logger.log_exception(env['rack.exception'])
27
+ gray_logger.after_request_log.status_code = status.to_i
28
+ gray_logger.after_request_log.short_message = "Request: #{req.path} (#{status.to_i})" if gray_logger.after_request_log[:short_message].nil?
29
+ gray_logger.flush
30
+ [status, headers, body]
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+
37
+ class Proxy
38
+ attr_accessor :proxied_logger, :gray_logger
39
+
40
+ def initialize(attributes={})
41
+ self.proxied_logger = attributes[:proxied_logger]
42
+ self.gray_logger = attributes[:gray_logger]
43
+ end
44
+
45
+ # def debug(*args)
46
+ # if proxied_logger.nil?
47
+ # super(*args)
48
+ # else
49
+ # after_request_log.append_to(:log_file, "[debug] #{args[0]}") unless gray_logger.nil?
50
+ # proxied_logger.send(:debug, *args)
51
+ # end
52
+ # end
53
+ GELF::Levels.constants.each do |const|
54
+ class_eval <<-EOT, __FILE__, __LINE__ + 1
55
+ def #{const.downcase}(*args)
56
+ if proxied_logger.nil?
57
+ gray_logger.send(:#{const.downcase}, *args)
58
+ else
59
+ gray_logger.after_request_log.append_to(:log_file, "[#{const.downcase}] \#{args[0]}") unless gray_logger.nil?
60
+ proxied_logger.send(:#{const.downcase}, *args)
61
+ end
62
+ end
63
+ EOT
64
+ end
65
+ private
66
+ def method_missing(method_name, *args, &block)
67
+ unless gray_logger.nil?
68
+ begin
69
+ gray_logger.send(method_name, *args, &block)
70
+ rescue => e
71
+ gray_logger.handle_exception(e)
72
+ end
73
+ end
74
+ unless proxied_logger.nil?
75
+ begin
76
+ proxied_logger.send(method_name, *args, &block)
77
+ rescue => e
78
+ proxied_logger.error(e.backtrace.join("\n"))
79
+ end
80
+ end
81
+ end
82
+
83
+ end
84
+
85
+ # config.logger = Rack::GrayLogger.after_request_proxy(SysLogger.new)
86
+ def self.after_request_proxy(proxied_logger)
87
+ self.proxy = Rack::GrayLogger::Proxy.new(:proxied_logger => proxied_logger)
88
+ proxy
89
+ end
90
+
91
+ def self.proxy= proxy
92
+ @proxy = proxy
93
+ end
94
+
95
+ def self.proxy
96
+ @proxy
97
+ end
98
+
99
+ end
100
+ end
@@ -13,8 +13,7 @@ module GrayLogger
13
13
  # Overrides the rescue_action method in ActionController::Base, but does not inhibit
14
14
  # any custom processing that is defined with Rails 2's exception helpers.
15
15
  def rescue_action_with_gray_logger(exception)
16
- gray_logger.exception_backtrace = exception.backtrace.join("\n")
17
- gray_logger.short_message = "Error: #{exception.inspect}"
16
+ gray_logger.handle_exception(exception)
18
17
  rescue_action_without_gray_logger(exception)
19
18
  end
20
19
  end
@@ -5,7 +5,7 @@ module GrayLogger
5
5
  begin
6
6
  initializer "gray_logger.configure_rails_initialization" do |app|
7
7
  configuration = YAML.load(File.read(Rails.root.join('config/gray_logger.yml')))[Rails.env]
8
- app.middleware.insert_after "ActionDispatch::ShowExceptions", "GrayLogger::Middleware", :configuration => configuration
8
+ app.middleware.insert_after "ActionDispatch::ShowExceptions", "Rack::GrayLogger::Middleware", :configuration => configuration
9
9
  end
10
10
  rescue => e
11
11
  $stderr.puts("GrayLogger not configured. Please add config/gray_logger.yml")
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gray_logger
3
3
  version: !ruby/object:Gem::Version
4
- hash: 51
4
+ hash: 49
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
- - 4
10
- version: 0.9.4
9
+ - 5
10
+ version: 0.9.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Benjamin Behr
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-11-13 00:00:00 Z
18
+ date: 2012-11-16 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: gelf
@@ -40,10 +40,11 @@ extensions: []
40
40
  extra_rdoc_files: []
41
41
 
42
42
  files:
43
+ - lib/gray_logger/bucket.rb
43
44
  - lib/gray_logger/helper_methods.rb
45
+ - lib/gray_logger/logger.rb
44
46
  - lib/gray_logger/message.rb
45
- - lib/gray_logger/message_store.rb
46
- - lib/gray_logger/middleware.rb
47
+ - lib/gray_logger/rack.rb
47
48
  - lib/gray_logger/rails_modules.rb
48
49
  - lib/gray_logger/railtie.rb
49
50
  - lib/gray_logger/support.rb
@@ -1,42 +0,0 @@
1
- module GrayLogger
2
-
3
- class MessageStore
4
- attr_reader :store
5
-
6
- def initialize(store={})
7
- @store = store
8
- end
9
-
10
- # gets a hash with fields
11
- def add(field_set)
12
- field_set.each_pair do |field, value|
13
- @store[field.to_sym] = value
14
- end
15
- @store
16
- end
17
- alias_method :<<, :add
18
-
19
- def to_message
20
- GrayLogger::Message.new(@store)
21
- end
22
-
23
- protected
24
- def method_missing(method_name, args, &block)
25
- if method_name.to_s.end_with?("=")
26
-
27
- # def method_name=(value)
28
- # @store[:method_name] = value
29
- # end
30
- instance_eval <<-EOMEVAL
31
- def #{method_name}(value)
32
- @store[:#{method_name.to_s.chop}] = value
33
- end
34
- EOMEVAL
35
-
36
- send(method_name, args)
37
- end
38
- end
39
-
40
- end
41
-
42
- end
@@ -1,43 +0,0 @@
1
- module GrayLogger
2
-
3
- class Middleware
4
- include GrayLogger::Support
5
-
6
- attr_accessor :gray_logger
7
-
8
- def initialize(app, options={})
9
- @app = app
10
- configuration = symbolize_keys(options.delete(:configuration))
11
- self.gray_logger = if configuration && configuration[:host] && configuration[:port]
12
- size = ENV['GRAYLOGGER_SIZE'] || configuration.delete(:size) || "WAN"
13
- GELF::Logger.new(configuration.delete(:host), configuration.delete(:port), size, configuration)
14
- else
15
- options.delete(:logger)
16
- end
17
- end
18
-
19
- def call(env)
20
-
21
- begin
22
- message_store = env["rack.gray_logger.message_store"] = GrayLogger::MessageStore.new(:level => GELF::INFO)
23
- status, headers, body = @app.call(env)
24
- rescue => e
25
- message_store.short_message = "Error: #{e.inspect}"
26
- message_store.exception_backtrace = e.backtrace.join("\n")
27
- raise
28
- ensure
29
- error = env['rack.exception']
30
- if error
31
- message_store.short_message = "Error: #{error.inspect}"
32
- message_store.exception_backtrace = error.backtrace.join("\n")
33
- end
34
- message_store.status_code = status.to_i
35
- gray_logger.notify!(message_store.to_message) unless gray_logger.nil?
36
- [status, headers, body]
37
- end
38
-
39
- end
40
-
41
- end
42
-
43
- end