gray_logger 0.9.4 → 0.9.5

Sign up to get free protection for your applications and to get access to all the features.
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