Class: Sawmill::LogRecordMiddleware
- Inherits:
-
Object
- Object
- Sawmill::LogRecordMiddleware
- Defined in:
- lib/sawmill/log_record_middleware.rb
Overview
A Rack middleware that starts and ends a log record. Insert this in your Rack stack to wrap requests in a log record.
Instance Method Summary collapse
- #call(env_) ⇒ Object
-
#initialize(app_, logger_ = nil, opts_ = {}) ⇒ LogRecordMiddleware
constructor
Create a middleware object for Rack.
Constructor Details
#initialize(app_, logger_ = nil, opts_ = {}) ⇒ LogRecordMiddleware
Create a middleware object for Rack.
If you do not provide a logger object, one will be generated for you that simply logs to STDOUT.
Recognized options include:
:request_id_key-
The name of a rack environment key where the request ID should be stored. If not specified, defaults to “sawmill.request_id”.
:start_time_attribute-
If present, logs an attribute with this name with the starting timestamp for the request. If absent, does not log this attribute.
:end_time_attribute-
If present, logs an attribute with this name with the ending timestamp for the request. If absent, does not log this attribute.
:elapsed_time_attribute-
If present, logs an attribute with this name with the elapsed time for the request, in seconds. If absent, does not log this attribute.
:pre_logger-
A proc that is called at the start of the request, and passed the logger and the rack environment. Optional.
:post_logger-
A proc that is called at the end of the request, and passed the logger and the rack environment. Optional.
72 73 74 75 76 77 78 79 80 81 |
# File 'lib/sawmill/log_record_middleware.rb', line 72 def initialize(app_, logger_=nil, opts_={}) @app = app_ @logger = logger_ || Logger.new(:progname => 'rack', :processor => Formatter.new(::STDOUT)) @request_id_key = opts_[:request_id_key] || 'sawmill.request_id' @start_time_attribute = opts_[:start_time_attribute] @end_time_attribute = opts_[:end_time_attribute] @elapsed_time_attribute = opts_[:elapsed_time_attribute] @pre_logger = opts_[:pre_logger] @post_logger = opts_[:post_logger] end |
Instance Method Details
#call(env_) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/sawmill/log_record_middleware.rb', line 84 def call(env_) env_[@request_id_key] = @logger.begin_record start_time_ = ::Time.now.utc if @start_time_attribute @logger.set_attribute(@start_time_attribute, start_time_.strftime('%Y-%m-%dT%H:%M:%S.') + ('%06d' % start_time_.usec) + 'Z') end if @pre_logger @pre_logger.call(@logger, env_) end begin return @app.call(env_) ensure if @post_logger @post_logger.call(@logger, env_) end end_time_ = ::Time.now.utc if @end_time_attribute @logger.set_attribute(@end_time_attribute, end_time_.strftime('%Y-%m-%dT%H:%M:%S.') + ('%06d' % end_time_.usec) + 'Z') end if @elapsed_time_attribute @logger.set_attribute(@elapsed_time_attribute, '%.6f' % (end_time_ - start_time_)) end @logger.end_record end end |