faraday-detailed_logger 1.1.0 → 2.0.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -1
- data/README.md +7 -0
- data/lib/faraday/detailed_logger/middleware.rb +20 -11
- data/lib/faraday/detailed_logger/tagged_logging.rb +75 -0
- data/lib/faraday/detailed_logger/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 39391a10ebf6f5c1e3afd4a16142b4a7a5cf44de
|
4
|
+
data.tar.gz: 7c339da08c5eba109844ec73cc5fe555b7a32f06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c4eb19555cb5d2062e6574f06c20c2104351ea4416912012296e323cc2c6c2b6f5a3342c6771cf350b7ddd5a997cc30a00e29a3d66298ff92e9afabb42834c9
|
7
|
+
data.tar.gz: 04c930843a10137ddccf41c45530519c25eebbd7e38e04e18f19ff207cb1686b449461a23df23ba01855a822502920f693c43ea925cf7c6d8c3babf35579794c
|
data/CHANGELOG.md
CHANGED
@@ -10,6 +10,18 @@
|
|
10
10
|
|
11
11
|
* No significant changes.
|
12
12
|
|
13
|
+
## [2.0.0][] / 2016-07-08
|
14
|
+
|
15
|
+
* Remove Logger `progname` support/configuration. Varying the progname appears
|
16
|
+
to make logging in a syslog-like environment unnecessarily more difficult.
|
17
|
+
* Add tagging support to the logger. Any number of tags may be given which will
|
18
|
+
be prepended to all lines logged. This is largely follows the
|
19
|
+
ActiveSupport::TaggedLogging log functionality. "Old" usages of this library
|
20
|
+
will treat any previous `progname` strings as a tag and continue to record
|
21
|
+
them to the log. Even though the progname is now logged as a tag, this is
|
22
|
+
still considered a breaking change just in case system configurations were
|
23
|
+
dependent on the progname for log output redirection (syslog).
|
24
|
+
|
13
25
|
## [1.1.0][] / 2016-06-15
|
14
26
|
|
15
27
|
* Log HTTP 4XX and HTTP 5XX responses at a WARN level.
|
@@ -20,4 +32,5 @@
|
|
20
32
|
|
21
33
|
[1.0.0]: https://github.com/envylabs/faraday-detailed_logger/tree/v1.0.0
|
22
34
|
[1.1.0]: https://github.com/envylabs/faraday-detailed_logger/compare/v1.0.0...v1.1.0
|
23
|
-
[
|
35
|
+
[2.0.0]: https://github.com/envylabs/faraday-detailed_logger/compare/v1.1.0...v2.0.0
|
36
|
+
[HEAD]: https://github.com/envylabs/faraday-detailed_logger/compare/v2.0.0...master
|
data/README.md
CHANGED
@@ -75,6 +75,13 @@ Or, perhaps use your Rails logger:
|
|
75
75
|
faraday.response :detailed_logger, Rails.logger
|
76
76
|
```
|
77
77
|
|
78
|
+
Further, you might like to tag logged output to make it easily located in your
|
79
|
+
logs:
|
80
|
+
|
81
|
+
```ruby
|
82
|
+
faraday.response :detailed_logger, Rails.logger, "Sushi Request"
|
83
|
+
```
|
84
|
+
|
78
85
|
### Example output
|
79
86
|
|
80
87
|
Because logs generally work best with a single line of data per entry, the
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "faraday"
|
2
|
+
require "faraday/detailed_logger/tagged_logging"
|
2
3
|
|
3
4
|
module Faraday
|
4
5
|
module DetailedLogger
|
@@ -25,14 +26,14 @@ module Faraday
|
|
25
26
|
# app - A Faraday-compatible middleware stack or application.
|
26
27
|
# logger - A Logger-compatible object to which the log information will
|
27
28
|
# be recorded.
|
28
|
-
#
|
29
|
+
# tags - An optional array of tags to apply to the log output.
|
29
30
|
#
|
30
31
|
# Returns a Logger instance.
|
31
32
|
#
|
32
|
-
def initialize(app, logger = nil,
|
33
|
+
def initialize(app, logger = nil, *tags)
|
33
34
|
super(app)
|
34
|
-
@logger = logger || self.class.default_logger
|
35
|
-
@
|
35
|
+
@logger = TaggedLogging.new(logger || self.class.default_logger)
|
36
|
+
@tags = tags
|
36
37
|
end
|
37
38
|
|
38
39
|
# Public: Used by Faraday to execute the middleware during the
|
@@ -43,8 +44,10 @@ module Faraday
|
|
43
44
|
# Returns the result of the parent application execution.
|
44
45
|
#
|
45
46
|
def call(env)
|
46
|
-
|
47
|
-
|
47
|
+
logger.tagged(*tags) do
|
48
|
+
logger.info { "#{env[:method].upcase} #{env[:url]}" }
|
49
|
+
logger.debug { curl_output(env[:request_headers], env[:body]).inspect }
|
50
|
+
end
|
48
51
|
super
|
49
52
|
end
|
50
53
|
|
@@ -57,25 +60,31 @@ module Faraday
|
|
57
60
|
#
|
58
61
|
def on_complete(env)
|
59
62
|
status = env[:status]
|
60
|
-
|
61
|
-
|
63
|
+
|
64
|
+
logger.tagged(*tags) do
|
65
|
+
log_response_status(status) { "HTTP #{status}" }
|
66
|
+
logger.debug { curl_output(env[:response_headers], env[:body]).inspect }
|
67
|
+
end
|
62
68
|
end
|
63
69
|
|
64
70
|
|
65
71
|
private
|
66
72
|
|
67
73
|
|
74
|
+
attr_reader :logger
|
75
|
+
attr_reader :tags
|
76
|
+
|
68
77
|
def curl_output(headers, body)
|
69
78
|
string = headers.collect { |k,v| "#{k}: #{v}" }.join("\n")
|
70
79
|
string + "\n\n#{body}"
|
71
80
|
end
|
72
81
|
|
73
|
-
def log_response_status(
|
82
|
+
def log_response_status(status, &block)
|
74
83
|
case status
|
75
84
|
when 200..399
|
76
|
-
|
85
|
+
logger.info(&block)
|
77
86
|
else
|
78
|
-
|
87
|
+
logger.warn(&block)
|
79
88
|
end
|
80
89
|
end
|
81
90
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'logger'
|
2
|
+
|
3
|
+
module Faraday
|
4
|
+
module DetailedLogger
|
5
|
+
# This was largely lifted from ActiveSupport::TaggedLogging. Modifications
|
6
|
+
# made to remove ActiveSupport dependencies (blank?, delegation, and
|
7
|
+
# ActiveSupport::Logger).
|
8
|
+
#
|
9
|
+
module TaggedLogging
|
10
|
+
extend Forwardable
|
11
|
+
|
12
|
+
module Formatter
|
13
|
+
BLANK = lambda { |value| value.respond_to?(:empty?) ? !!value.empty? : !value }
|
14
|
+
|
15
|
+
def call(severity, timestamp, progname, msg)
|
16
|
+
super(severity, timestamp, progname, "#{tags_text}#{msg}")
|
17
|
+
end
|
18
|
+
|
19
|
+
def tagged(*tags)
|
20
|
+
new_tags = push_tags(*tags)
|
21
|
+
yield self
|
22
|
+
ensure
|
23
|
+
pop_tags(new_tags.size)
|
24
|
+
end
|
25
|
+
|
26
|
+
def push_tags(*tags)
|
27
|
+
tags.flatten.reject(&BLANK).tap do |new_tags|
|
28
|
+
current_tags.concat new_tags
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def pop_tags(size = 1)
|
33
|
+
current_tags.pop size
|
34
|
+
end
|
35
|
+
|
36
|
+
def clear_tags!
|
37
|
+
current_tags.clear
|
38
|
+
end
|
39
|
+
|
40
|
+
def current_tags
|
41
|
+
@thread_key ||= "faraday_detailed_logger_tagged_logging_tags:#{object_id}".freeze
|
42
|
+
Thread.current[@thread_key] ||= []
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
def tags_text
|
47
|
+
tags = current_tags
|
48
|
+
if tags.any?
|
49
|
+
tags.collect { |tag| "[#{tag}] " }.join
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
def self.new(logger)
|
56
|
+
unless logger.respond_to?(:tagged)
|
57
|
+
logger.formatter ||= ::Logger::Formatter.new
|
58
|
+
logger.formatter.extend Formatter
|
59
|
+
logger.extend(self)
|
60
|
+
end
|
61
|
+
|
62
|
+
logger
|
63
|
+
end
|
64
|
+
|
65
|
+
def tagged(*tags)
|
66
|
+
formatter.tagged(*tags) { yield self }
|
67
|
+
end
|
68
|
+
|
69
|
+
def flush
|
70
|
+
clear_tags!
|
71
|
+
super if defined?(super)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faraday-detailed_logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Envy Labs
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -119,6 +119,7 @@ files:
|
|
119
119
|
- gemfiles/faraday_release.gemfile
|
120
120
|
- lib/faraday/detailed_logger.rb
|
121
121
|
- lib/faraday/detailed_logger/middleware.rb
|
122
|
+
- lib/faraday/detailed_logger/tagged_logging.rb
|
122
123
|
- lib/faraday/detailed_logger/version.rb
|
123
124
|
homepage: https://github.com/envylabs/faraday-detailed_logger
|
124
125
|
licenses:
|