alephant-logger 0.2.0 → 1.0.1
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/.ruby-version +1 -1
- data/README.md +30 -62
- data/alephant-logger.gemspec +0 -2
- data/lib/alephant/logger.rb +20 -23
- data/lib/alephant/logger/version.rb +1 -1
- data/spec/logger_spec.rb +24 -28
- metadata +25 -40
- data/lib/alephant/logger/cloudwatch_decorator.rb +0 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64032058c0749b0c64d5032d751481b4ca84b442
|
4
|
+
data.tar.gz: 73684eaf331ef5d93818846ba82300dfb9480738
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 392a50cf2e51c7e53d7a2e013969d6f9c19f8d543eaa7e01c29599b6fa087d79264c31f1d3d414e976ff60339f7374f63de455f080a54c0a35ffb56f6912b731
|
7
|
+
data.tar.gz: 9a9389935f96c1b6e019a8399046bedb6951dc860d78b1df16ed0768e9f57ea89c16d0a5cea07264103ea4991d7f5a6a7bda45a7bf767a53788e207db162df18
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
jruby-1.7
|
1
|
+
jruby-1.7
|
data/README.md
CHANGED
@@ -1,93 +1,61 @@
|
|
1
1
|
# Alephant::Logger
|
2
2
|
|
3
|
-
Logger functionality for Alephant
|
3
|
+
Logger functionality for BBC News' [Alephant](https://github.com/BBC-News/alephant) framework.
|
4
4
|
|
5
5
|
[](https://travis-ci.org/BBC-News/alephant-logger)
|
7
|
-
|
8
|
-
[](http://badge.fury.io/rb/alephant-logger)
|
6
|
+
Status](https://travis-ci.org/BBC-News/alephant-logger.png)](https://travis-ci.org/BBC-News/alephant-logger) [](http://badge.fury.io/rb/alephant-logger)
|
9
7
|
|
10
8
|
## Installation
|
11
9
|
|
12
10
|
Add this line to your application's Gemfile:
|
13
11
|
|
14
|
-
|
12
|
+
```
|
13
|
+
gem 'alephant-logger'
|
14
|
+
```
|
15
15
|
|
16
16
|
And then execute:
|
17
17
|
|
18
|
+
```
|
18
19
|
$ bundle
|
20
|
+
```
|
19
21
|
|
20
22
|
Or install it yourself as:
|
21
23
|
|
24
|
+
```
|
22
25
|
$ gem install alephant-logger
|
26
|
+
```
|
23
27
|
|
24
28
|
## Usage
|
25
29
|
|
26
30
|
```rb
|
27
|
-
require 'alephant/logger'
|
28
|
-
|
29
|
-
# Using the standard logger
|
30
|
-
class IncludesLogger
|
31
|
-
include Alephant::Logger
|
32
|
-
|
33
|
-
def calls_logger
|
34
|
-
logger.warn "MUCH WARN. WOW."
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
# Sets a logger
|
39
|
-
class SetsLogger
|
40
|
-
include Alephant::Logger
|
41
|
-
|
42
|
-
def calls_logger
|
43
|
-
Alephant::Logger.set_logger(CustomLogger.new)
|
44
|
-
logger.warn "SUCH CUSTOM. MUCH LOG."
|
45
|
-
end
|
46
|
-
end
|
47
|
-
```
|
48
|
-
|
49
|
-
### AWS CloudWatch Metrics
|
50
|
-
|
51
|
-
```ruby
|
52
|
-
require "aws-sdk"
|
53
31
|
require "alephant/logger"
|
54
|
-
require "alephant/logger/
|
32
|
+
require "alephant/logger/statsd"
|
33
|
+
require "alephant/logger/cloudwatch"
|
55
34
|
|
56
|
-
|
57
|
-
:
|
58
|
-
:
|
59
|
-
:
|
60
|
-
|
61
|
-
)
|
35
|
+
config = {
|
36
|
+
:host => "statsd.test.service.bbc.co.uk",
|
37
|
+
:port => 6452,
|
38
|
+
:namespace => "test"
|
39
|
+
}
|
62
40
|
|
63
|
-
|
64
|
-
|
65
|
-
)
|
41
|
+
statsd_driver = Alephant::Logger::Statsd.new config
|
42
|
+
cloudwatch_driver = Alephant::Logger::CloudWatch.new "my_namespace"
|
66
43
|
|
67
|
-
Alephant::Logger.
|
68
|
-
|
69
|
-
|
70
|
-
|
44
|
+
logger = Alephant::Logger.create([statsd_driver, cloudwatch_driver])
|
45
|
+
logger.increment "foo.bar"
|
46
|
+
logger.metric(:name => "FooBar", :unit => "Count", :value => 1)
|
47
|
+
```
|
71
48
|
|
72
|
-
|
73
|
-
logger.info "some info"
|
74
|
-
logger.debug "much debug"
|
75
|
-
logger.error "great error"
|
76
|
-
logger.warn "so warn"
|
77
|
-
logger.fatal "ooh fatal"
|
49
|
+
## Drivers
|
78
50
|
|
79
|
-
|
80
|
-
logger.metric({:name => "SomeMetricName", :unit => "Count", :value => 1})
|
81
|
-
end
|
82
|
-
end
|
51
|
+
You can consume an array of other gems to allow Alephant Logger to send custom metrics:
|
83
52
|
|
84
|
-
|
85
|
-
```
|
53
|
+
1. [Statsd](https://github.com/BBC-News/alephant-logger-statsd#alephantloggerstatsd)
|
86
54
|
|
87
55
|
## Contributing
|
88
56
|
|
89
|
-
1. Fork it
|
90
|
-
2. Create your feature branch
|
91
|
-
3. Commit your changes
|
92
|
-
4. Push to the branch
|
93
|
-
5. Create new Pull Request
|
57
|
+
1. [Fork it!](http://github.com/BBC-News/alephant-logger/fork)
|
58
|
+
2. Create your feature branch: `git checkout -b my-new-feature`
|
59
|
+
3. Commit your changes: `git commit -am 'Add some feature'`
|
60
|
+
4. Push to the branch: `git push origin my-new-feature`
|
61
|
+
5. Create new [Pull Request](https://github.com/BBC-News/alephant-logger/compare).
|
data/alephant-logger.gemspec
CHANGED
@@ -17,8 +17,6 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
-
spec.add_runtime_dependency "aws-sdk"
|
21
|
-
|
22
20
|
spec.add_development_dependency "rspec"
|
23
21
|
spec.add_development_dependency "rspec-nc"
|
24
22
|
spec.add_development_dependency "guard"
|
data/lib/alephant/logger.rb
CHANGED
@@ -2,35 +2,32 @@ require 'alephant/logger/version'
|
|
2
2
|
require 'logger'
|
3
3
|
|
4
4
|
module Alephant
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
def initialize(logger)
|
9
|
-
@logger = logger
|
10
|
-
end
|
11
|
-
|
12
|
-
def method_missing(name, *args)
|
13
|
-
logger.send(name, *args) if logger.respond_to? name
|
5
|
+
module Logger
|
6
|
+
def self.create(drivers = [])
|
7
|
+
Logger.new drivers
|
14
8
|
end
|
15
9
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
10
|
+
class Logger
|
11
|
+
def initialize(drivers)
|
12
|
+
@drivers = drivers << ::Logger.new(STDOUT)
|
13
|
+
end
|
20
14
|
|
21
|
-
|
22
|
-
|
15
|
+
def method_missing(name, *args)
|
16
|
+
drivers.each do |driver|
|
17
|
+
driver.send(name, *args) if driver.respond_to? name
|
18
|
+
end
|
19
|
+
end
|
23
20
|
|
24
|
-
|
25
|
-
|
26
|
-
|
21
|
+
def respond_to?(name)
|
22
|
+
drivers.any? do |driver|
|
23
|
+
driver.respond_to?(name) || super
|
24
|
+
end
|
25
|
+
end
|
27
26
|
|
28
|
-
|
29
|
-
@@logger ||= Alephant::DelegatingLogger.new ::Logger.new(STDOUT)
|
30
|
-
end
|
27
|
+
private
|
31
28
|
|
32
|
-
|
33
|
-
@@logger = Alephant::DelegatingLogger.new value
|
29
|
+
attr_reader :drivers
|
34
30
|
end
|
35
31
|
end
|
36
32
|
end
|
33
|
+
|
data/spec/logger_spec.rb
CHANGED
@@ -1,45 +1,41 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Alephant::Logger do
|
4
|
-
describe ".
|
5
|
-
|
6
|
-
|
7
|
-
specify {
|
8
|
-
expect(subject.get_logger.logger).to be_a Logger
|
9
|
-
}
|
4
|
+
describe ".create" do
|
5
|
+
specify do
|
6
|
+
expect(subject.create).to be_a Alephant::Logger::Logger
|
10
7
|
end
|
8
|
+
end
|
9
|
+
end
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
describe Alephant::Logger::Logger do
|
12
|
+
describe "#info" do
|
13
|
+
context "no logger drivers given" do
|
14
|
+
subject { Alephant::Logger::Logger.new [] }
|
15
|
+
|
16
|
+
specify do
|
17
|
+
expect_any_instance_of(::Logger).to receive(:info).with "msg"
|
18
|
+
|
19
|
+
subject.info "msg"
|
16
20
|
end
|
17
21
|
end
|
18
|
-
end
|
19
22
|
|
20
|
-
|
21
|
-
|
22
|
-
subject.set_logger(:bar)
|
23
|
-
expect(subject.class_variable_get(:@@logger).logger).to eq :bar
|
24
|
-
end
|
25
|
-
end
|
23
|
+
context "logger drivers given" do
|
24
|
+
subject { Alephant::Logger::Logger.new [driver] }
|
26
25
|
|
27
|
-
|
26
|
+
let(:driver) { double }
|
28
27
|
|
29
|
-
|
30
|
-
|
28
|
+
it "responding drivers receive method calls" do
|
29
|
+
expect(driver).to receive(:metric).with("foo")
|
31
30
|
|
32
|
-
|
33
|
-
logger
|
31
|
+
subject.metric("foo")
|
34
32
|
end
|
35
|
-
end
|
36
33
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
34
|
+
it "::Logger is always used" do
|
35
|
+
expect_any_instance_of(::Logger).to receive(:info).with "foo"
|
36
|
+
|
37
|
+
subject.info "foo"
|
41
38
|
end
|
42
39
|
end
|
43
|
-
|
44
40
|
end
|
45
41
|
end
|
metadata
CHANGED
@@ -1,156 +1,142 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alephant-logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Kenny
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: aws-sdk
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
16
15
|
requirements:
|
17
16
|
- - '>='
|
18
17
|
- !ruby/object:Gem::Version
|
19
18
|
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - '>='
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
19
|
name: rspec
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - '>='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
20
|
prerelease: false
|
21
|
+
type: :development
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
38
24
|
- - '>='
|
39
25
|
- !ruby/object:Gem::Version
|
40
26
|
version: '0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
|
-
name: rspec-nc
|
43
28
|
requirement: !ruby/object:Gem::Requirement
|
44
29
|
requirements:
|
45
30
|
- - '>='
|
46
31
|
- !ruby/object:Gem::Version
|
47
32
|
version: '0'
|
48
|
-
|
33
|
+
name: rspec-nc
|
49
34
|
prerelease: false
|
35
|
+
type: :development
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
38
|
- - '>='
|
53
39
|
- !ruby/object:Gem::Version
|
54
40
|
version: '0'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
|
-
name: guard
|
57
42
|
requirement: !ruby/object:Gem::Requirement
|
58
43
|
requirements:
|
59
44
|
- - '>='
|
60
45
|
- !ruby/object:Gem::Version
|
61
46
|
version: '0'
|
62
|
-
|
47
|
+
name: guard
|
63
48
|
prerelease: false
|
49
|
+
type: :development
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
52
|
- - '>='
|
67
53
|
- !ruby/object:Gem::Version
|
68
54
|
version: '0'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
|
-
name: guard-rspec
|
71
56
|
requirement: !ruby/object:Gem::Requirement
|
72
57
|
requirements:
|
73
58
|
- - '>='
|
74
59
|
- !ruby/object:Gem::Version
|
75
60
|
version: '0'
|
76
|
-
|
61
|
+
name: guard-rspec
|
77
62
|
prerelease: false
|
63
|
+
type: :development
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
66
|
- - '>='
|
81
67
|
- !ruby/object:Gem::Version
|
82
68
|
version: '0'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
|
-
name: pry
|
85
70
|
requirement: !ruby/object:Gem::Requirement
|
86
71
|
requirements:
|
87
72
|
- - '>='
|
88
73
|
- !ruby/object:Gem::Version
|
89
74
|
version: '0'
|
90
|
-
|
75
|
+
name: pry
|
91
76
|
prerelease: false
|
77
|
+
type: :development
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
80
|
- - '>='
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: '0'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
|
-
name: pry-remote
|
99
84
|
requirement: !ruby/object:Gem::Requirement
|
100
85
|
requirements:
|
101
86
|
- - '>='
|
102
87
|
- !ruby/object:Gem::Version
|
103
88
|
version: '0'
|
104
|
-
|
89
|
+
name: pry-remote
|
105
90
|
prerelease: false
|
91
|
+
type: :development
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
94
|
- - '>='
|
109
95
|
- !ruby/object:Gem::Version
|
110
96
|
version: '0'
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
|
-
name: pry-nav
|
113
98
|
requirement: !ruby/object:Gem::Requirement
|
114
99
|
requirements:
|
115
100
|
- - '>='
|
116
101
|
- !ruby/object:Gem::Version
|
117
102
|
version: '0'
|
118
|
-
|
103
|
+
name: pry-nav
|
119
104
|
prerelease: false
|
105
|
+
type: :development
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
107
|
requirements:
|
122
108
|
- - '>='
|
123
109
|
- !ruby/object:Gem::Version
|
124
110
|
version: '0'
|
125
111
|
- !ruby/object:Gem::Dependency
|
126
|
-
name: bundler
|
127
112
|
requirement: !ruby/object:Gem::Requirement
|
128
113
|
requirements:
|
129
114
|
- - ~>
|
130
115
|
- !ruby/object:Gem::Version
|
131
116
|
version: '1.5'
|
132
|
-
|
117
|
+
name: bundler
|
133
118
|
prerelease: false
|
119
|
+
type: :development
|
134
120
|
version_requirements: !ruby/object:Gem::Requirement
|
135
121
|
requirements:
|
136
122
|
- - ~>
|
137
123
|
- !ruby/object:Gem::Version
|
138
124
|
version: '1.5'
|
139
125
|
- !ruby/object:Gem::Dependency
|
140
|
-
name: rake
|
141
126
|
requirement: !ruby/object:Gem::Requirement
|
142
127
|
requirements:
|
143
128
|
- - '>='
|
144
129
|
- !ruby/object:Gem::Version
|
145
130
|
version: '0'
|
146
|
-
|
131
|
+
name: rake
|
147
132
|
prerelease: false
|
133
|
+
type: :development
|
148
134
|
version_requirements: !ruby/object:Gem::Requirement
|
149
135
|
requirements:
|
150
136
|
- - '>='
|
151
137
|
- !ruby/object:Gem::Version
|
152
138
|
version: '0'
|
153
|
-
description:
|
139
|
+
description:
|
154
140
|
email:
|
155
141
|
- kenoir@gmail.com
|
156
142
|
executables: []
|
@@ -167,7 +153,6 @@ files:
|
|
167
153
|
- Rakefile
|
168
154
|
- alephant-logger.gemspec
|
169
155
|
- lib/alephant/logger.rb
|
170
|
-
- lib/alephant/logger/cloudwatch_decorator.rb
|
171
156
|
- lib/alephant/logger/version.rb
|
172
157
|
- spec/logger_spec.rb
|
173
158
|
- spec/spec_helper.rb
|
@@ -175,7 +160,7 @@ homepage: ''
|
|
175
160
|
licenses:
|
176
161
|
- MIT
|
177
162
|
metadata: {}
|
178
|
-
post_install_message:
|
163
|
+
post_install_message:
|
179
164
|
rdoc_options: []
|
180
165
|
require_paths:
|
181
166
|
- lib
|
@@ -190,9 +175,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
190
175
|
- !ruby/object:Gem::Version
|
191
176
|
version: '0'
|
192
177
|
requirements: []
|
193
|
-
rubyforge_project:
|
194
|
-
rubygems_version: 2.
|
195
|
-
signing_key:
|
178
|
+
rubyforge_project:
|
179
|
+
rubygems_version: 2.1.9
|
180
|
+
signing_key:
|
196
181
|
specification_version: 4
|
197
182
|
summary: Logger functionality for Alephant
|
198
183
|
test_files:
|
@@ -1,57 +0,0 @@
|
|
1
|
-
require "aws-sdk"
|
2
|
-
|
3
|
-
module Alephant
|
4
|
-
module Logger
|
5
|
-
class CloudWatchDecorator
|
6
|
-
ONE_HOUR = 3600
|
7
|
-
|
8
|
-
def initialize(logger, namespace)
|
9
|
-
@logger = logger
|
10
|
-
@namespace = namespace
|
11
|
-
@cloudwatch = AWS::CloudWatch.new
|
12
|
-
end
|
13
|
-
|
14
|
-
def metric(opts)
|
15
|
-
name, value, unit, dimensions = opts.values_at(:name, :value, :unit, :dimensions)
|
16
|
-
|
17
|
-
Thread.new do
|
18
|
-
cloudwatch.put_metric_data(
|
19
|
-
:namespace => namespace,
|
20
|
-
:metric_data => [{
|
21
|
-
:metric_name => name,
|
22
|
-
:value => value,
|
23
|
-
:unit => unit || "None",
|
24
|
-
:dimensions => parse(dimensions || {})
|
25
|
-
}]
|
26
|
-
)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
# Ruby's Kernel implements a `warn` method
|
31
|
-
def warn(*args)
|
32
|
-
logger.warn(*args)
|
33
|
-
end
|
34
|
-
|
35
|
-
def method_missing(name, *args)
|
36
|
-
logger.send(name, *args)
|
37
|
-
end
|
38
|
-
|
39
|
-
def respond_to?(name)
|
40
|
-
logger.respond_to?(name) || super
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
45
|
-
attr_reader :logger, :cloudwatch, :namespace
|
46
|
-
|
47
|
-
def parse(dimensions)
|
48
|
-
dimensions.map do |name, value|
|
49
|
-
{
|
50
|
-
:name => name,
|
51
|
-
:value => value
|
52
|
-
}
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|