logput 0.0.3 → 0.0.4
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/Fudgefile +1 -1
- data/README.md +10 -5
- data/lib/logput/adapters/base.rb +34 -0
- data/lib/logput/adapters/logger.rb +22 -0
- data/lib/logput/adapters/tagged_logging.rb +22 -0
- data/lib/logput/adapters.rb +23 -0
- data/lib/logput/middleware.rb +29 -17
- data/lib/logput/version.rb +1 -1
- data/lib/logput.rb +1 -0
- data/spec/adapters/base_spec.rb +36 -0
- data/spec/adapters/logger_spec.rb +30 -0
- data/spec/adapters/tagged_logging_spec.rb +33 -0
- data/spec/adapters_spec.rb +41 -0
- data/spec/middleware_spec.rb +0 -4
- data/spec/spec_helper.rb +4 -0
- metadata +15 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 19a7457eddef652b545880acae4704d2b6f238da
|
4
|
+
data.tar.gz: b2a1859fcc2bdb935192a177ce82de6f1234ef46
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b910ed111410a841bcf269d45731b026cd75d0a8beb6c64b9ec087032a25f82bf810c57114982fb315893ce58460474f4c4d18fcf32a23a0e9cdf4304826422f
|
7
|
+
data.tar.gz: 06e122d67f32127abee46d988ddcb388c4ec761acf6873df197680b15c81cbfce814f6b404006f4cd05210ed12f9ffbecb7764c755bd1a511a895dfda2d30868
|
data/Fudgefile
CHANGED
data/README.md
CHANGED
@@ -1,15 +1,20 @@
|
|
1
1
|
# Logput
|
2
2
|
|
3
|
-
[](https://travis-ci.org/asmega/logput)
|
3
|
+
[](https://travis-ci.org/asmega/logput) [](https://codeclimate.com/github/asmega/logput) [](https://gemnasium.com/asmega/logput) [](https://badge.fury.io/rb/logput)
|
4
4
|
|
5
5
|
Rack middleware to sit in a rails app to put put the current environments log to a webpage. eg /logput
|
6
6
|
|
7
7
|
To be used in test and development environments to see logs without needing direct access to the box.
|
8
8
|
|
9
|
-
This NOT to be used in production like environments.
|
9
|
+
:warning: This is *NOT* to be used in production like environments.
|
10
10
|
|
11
11
|
Supports Rails 3.x.x and 4.x.x
|
12
12
|
|
13
|
+
## Credits
|
14
|
+
|
15
|
+
* Phil Lee ([@asmega](https://github.com/asmega)) [Author]
|
16
|
+
* Chris Barber ([@chrisbarber86](https://github.com/chrisbarber86))
|
17
|
+
|
13
18
|
## Installation
|
14
19
|
|
15
20
|
Add this line to your application's Gemfile:
|
@@ -32,14 +37,14 @@ Inside you rails app. Add the following line to config/development.rb and/or any
|
|
32
37
|
|
33
38
|
The following configuration options are available.
|
34
39
|
|
35
|
-
*
|
36
|
-
*
|
40
|
+
* `:path_to_log_file => '/path/to/custom/log'`. Defaults to current environments log file if in rails.
|
41
|
+
* `:lines_to_read => 1000`. Defaults to 500.
|
37
42
|
|
38
43
|
Example.
|
39
44
|
|
40
45
|
config.middleware.use(Logput::Middleware, :lines_to_read => 300, :path_to_log_file => './log/delayed_job')
|
41
46
|
|
42
|
-
Start
|
47
|
+
Start your rails server as normal in the set environment. Navigate to /logput e.g. [http://localhost:3000/logput](http://localhost:3000/logput)
|
43
48
|
|
44
49
|
## Contributing
|
45
50
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Logput
|
2
|
+
module Logput
|
3
|
+
# Logging Adapters
|
4
|
+
module Adapters
|
5
|
+
# Base class from which all adapters inherit
|
6
|
+
class Base
|
7
|
+
# Initialize
|
8
|
+
def initialize(logger)
|
9
|
+
@logger = logger
|
10
|
+
end
|
11
|
+
|
12
|
+
# Registers a new adapter
|
13
|
+
#
|
14
|
+
# @param [Symbol] adapter The name of the adapter
|
15
|
+
def self.register(adapter)
|
16
|
+
raise "Already Registered :#{adapter}" if Logput::Adapters.registered_adapters[adapter]
|
17
|
+
Logput::Adapters.registered_adapters[adapter] = self
|
18
|
+
end
|
19
|
+
|
20
|
+
# Placeholder for handles? method to be overridden when subclassed
|
21
|
+
# @param [Class] _logger
|
22
|
+
# @return [Boolean]
|
23
|
+
def self.handles?(_logger)
|
24
|
+
raise NotImplementedError
|
25
|
+
end
|
26
|
+
|
27
|
+
# Placeholder for path method to be overridden when subclassed
|
28
|
+
# @return [String] path
|
29
|
+
def path
|
30
|
+
raise NotImplementedError
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Logput
|
2
|
+
module Logput
|
3
|
+
# Logging Adapters
|
4
|
+
module Adapters
|
5
|
+
# Logger Adapter
|
6
|
+
class Logger < Base
|
7
|
+
register :logger
|
8
|
+
|
9
|
+
# @param [Class] logger
|
10
|
+
# @return [Boolean]
|
11
|
+
def self.handles?(logger)
|
12
|
+
return false unless logger
|
13
|
+
logger.is_a? ::Logger
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [String] path
|
17
|
+
def path
|
18
|
+
@logger.instance_variable_get(:@logdev).filename
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Logput
|
2
|
+
module Logput
|
3
|
+
# Logging Adapters
|
4
|
+
module Adapters
|
5
|
+
# Active Support Tagged Logging Adapter
|
6
|
+
class TaggedLogging < Base
|
7
|
+
register :tagged_logging
|
8
|
+
|
9
|
+
# @param [Class] logger
|
10
|
+
# @return [Boolean]
|
11
|
+
def self.handles?(logger)
|
12
|
+
return false unless logger
|
13
|
+
logger.is_a? ::ActiveSupport::TaggedLogging
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [String] path
|
17
|
+
def path
|
18
|
+
@logger.instance_variable_get(:@logger).instance_variable_get(:@log_dest).path
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# Logput
|
2
|
+
module Logput
|
3
|
+
# Logging Adapters
|
4
|
+
module Adapters
|
5
|
+
# @return [Hash] Currently registered adapters
|
6
|
+
def self.registered_adapters
|
7
|
+
@registered_adapters ||= {}
|
8
|
+
end
|
9
|
+
|
10
|
+
# Find a registered adapter
|
11
|
+
# @return [Adapter] An instance of the adapter, or raise an exception
|
12
|
+
def self.obtain(logger)
|
13
|
+
registered_adapters.each do |_, adapter|
|
14
|
+
return adapter.new(logger) if adapter.handles?(logger)
|
15
|
+
end
|
16
|
+
raise "#{logger} is not supported."
|
17
|
+
end
|
18
|
+
|
19
|
+
require 'logput/adapters/base'
|
20
|
+
require 'logput/adapters/logger'
|
21
|
+
require 'logput/adapters/tagged_logging'
|
22
|
+
end
|
23
|
+
end
|
data/lib/logput/middleware.rb
CHANGED
@@ -10,36 +10,48 @@ module Logput
|
|
10
10
|
|
11
11
|
# Call
|
12
12
|
def call(env)
|
13
|
-
@
|
13
|
+
@env = env
|
14
|
+
@path_to_log_file ||= default_path_to_log_file
|
14
15
|
|
15
|
-
|
16
|
+
ensure_log_file_exists!
|
16
17
|
|
17
|
-
if
|
18
|
-
|
19
|
-
[200, {"Content-Type" => "text/html"}, ["<pre>", out, "</pre>"]]
|
18
|
+
if is_logput?
|
19
|
+
generate_output!
|
20
20
|
else
|
21
|
-
@app.call(env)
|
21
|
+
@app.call(@env)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
private
|
26
26
|
|
27
|
-
def
|
27
|
+
def ensure_log_file_exists!
|
28
|
+
raise 'Log file does not exist' unless File.exist? @path_to_log_file
|
29
|
+
end
|
30
|
+
|
31
|
+
def is_logput?
|
32
|
+
@env['PATH_INFO'] == '/logput'
|
33
|
+
end
|
34
|
+
|
35
|
+
def generate_output!
|
36
|
+
out = `tail -n #{@lines_to_read} #{@path_to_log_file}`
|
37
|
+
[200, {"Content-Type" => "text/html"}, ["<pre>", out, "</pre>"]]
|
38
|
+
end
|
39
|
+
|
40
|
+
def default_path_to_log_file
|
28
41
|
raise Exception, 'Must specify path to Rails log file' unless defined? Rails
|
29
|
-
path
|
42
|
+
path
|
30
43
|
end
|
31
44
|
|
32
|
-
def logger
|
33
|
-
env['action_dispatch.logger']
|
45
|
+
def logger
|
46
|
+
@env['action_dispatch.logger']
|
34
47
|
end
|
35
48
|
|
36
|
-
def path
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
end
|
49
|
+
def path
|
50
|
+
logger_adapter.path
|
51
|
+
end
|
52
|
+
|
53
|
+
def logger_adapter
|
54
|
+
@logger_adapter ||= Logput::Adapters.obtain(logger)
|
43
55
|
end
|
44
56
|
end
|
45
57
|
end
|
data/lib/logput/version.rb
CHANGED
data/lib/logput.rb
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class UnRegisteredAdapter < Logput::Adapters::Base
|
4
|
+
end
|
5
|
+
|
6
|
+
describe Logput::Adapters::Base do
|
7
|
+
describe '.register' do
|
8
|
+
after :each do
|
9
|
+
Logput::Adapters.registered_adapters.delete(:test)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'adds the current adapter to the registry' do
|
13
|
+
expect(Logput::Adapters.registered_adapters[:test]).to eq(nil)
|
14
|
+
UnRegisteredAdapter.register :test
|
15
|
+
expect(Logput::Adapters.registered_adapters[:test]).to eq(UnRegisteredAdapter)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '.handles?' do
|
20
|
+
it 'raises a NotImplementedError' do
|
21
|
+
expect {
|
22
|
+
described_class.handles?(double)
|
23
|
+
}.to raise_error(NotImplementedError)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#path' do
|
28
|
+
subject { described_class.new(:foo) }
|
29
|
+
|
30
|
+
it 'raises a NotImplementedError' do
|
31
|
+
expect {
|
32
|
+
subject.path
|
33
|
+
}.to raise_error(NotImplementedError)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Logput::Adapters::Logger do
|
4
|
+
describe '.handles?' do
|
5
|
+
it 'returns true when passed a Logger instance' do
|
6
|
+
expect(described_class.handles?(::Logger.new)).to eq(true)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'returns false when passed anything else' do
|
10
|
+
expect(described_class.handles?(::ActiveSupport::TaggedLogging.new)).to eq(false)
|
11
|
+
expect(described_class.handles?(:foo)).to eq(false)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#path' do
|
16
|
+
let(:path) { './spec/support/test.log' }
|
17
|
+
let(:logger) { ::Logger.new }
|
18
|
+
let(:logdev) { double(:filename => path) }
|
19
|
+
|
20
|
+
before :each do
|
21
|
+
allow(logger).to receive(:instance_variable_get).with(:@logdev).and_return(logdev)
|
22
|
+
end
|
23
|
+
|
24
|
+
subject { described_class.new(logger) }
|
25
|
+
|
26
|
+
it 'returns the correct path' do
|
27
|
+
expect(subject.path).to eq(path)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Logput::Adapters::TaggedLogging do
|
4
|
+
describe '.handles?' do
|
5
|
+
it 'returns true when passed an ActiveSupport::TaggedLogging instance' do
|
6
|
+
expect(described_class.handles?(::ActiveSupport::TaggedLogging.new)).to eq(true)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'returns false when passed anything else' do
|
10
|
+
expect(described_class.handles?(::Logger.new)).to eq(false)
|
11
|
+
expect(described_class.handles?(:foo)).to eq(false)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#path' do
|
16
|
+
let(:path) { './spec/support/test.log' }
|
17
|
+
let(:logger) { ::ActiveSupport::TaggedLogging.new }
|
18
|
+
let(:logvar) { double }
|
19
|
+
let(:logdev) { double(:filename => path) }
|
20
|
+
let(:log_dest) { double(:path => path) }
|
21
|
+
|
22
|
+
before :each do
|
23
|
+
allow(logger).to receive(:instance_variable_get).with(:@logger).and_return(logvar)
|
24
|
+
allow(logvar).to receive(:instance_variable_get).with(:@log_dest).and_return(log_dest)
|
25
|
+
end
|
26
|
+
|
27
|
+
subject { described_class.new(logger) }
|
28
|
+
|
29
|
+
it 'returns the correct path' do
|
30
|
+
expect(subject.path).to eq(path)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class TestAdapter
|
4
|
+
def initialize(logger); end
|
5
|
+
def self.handles?(logger); false; end
|
6
|
+
end
|
7
|
+
|
8
|
+
describe Logput::Adapters do
|
9
|
+
|
10
|
+
describe '.registered_adapters' do
|
11
|
+
let(:expected) {{
|
12
|
+
logger: Logput::Adapters::Logger,
|
13
|
+
tagged_logging: Logput::Adapters::TaggedLogging
|
14
|
+
}}
|
15
|
+
|
16
|
+
it 'returns a hash of registered adapters' do
|
17
|
+
expect(described_class.registered_adapters).to eq(expected)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '.obtain' do
|
22
|
+
before :each do
|
23
|
+
Logput::Adapters.registered_adapters[:test] = TestAdapter
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'when an adapter matches' do
|
27
|
+
it 'returns an instance of a matching adapter' do
|
28
|
+
allow(TestAdapter).to receive(:handles?).with(:bar).and_return(true)
|
29
|
+
expect(described_class.obtain(:bar)).to be_a(TestAdapter)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'when no adapter matches' do
|
34
|
+
it 'raises a logger not supported exception' do
|
35
|
+
expect {
|
36
|
+
described_class.obtain(:foo)
|
37
|
+
}.to raise_error
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/spec/middleware_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logput
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Philip Lee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -166,9 +166,17 @@ files:
|
|
166
166
|
- README.md
|
167
167
|
- Rakefile
|
168
168
|
- lib/logput.rb
|
169
|
+
- lib/logput/adapters.rb
|
170
|
+
- lib/logput/adapters/base.rb
|
171
|
+
- lib/logput/adapters/logger.rb
|
172
|
+
- lib/logput/adapters/tagged_logging.rb
|
169
173
|
- lib/logput/middleware.rb
|
170
174
|
- lib/logput/version.rb
|
171
175
|
- logput.gemspec
|
176
|
+
- spec/adapters/base_spec.rb
|
177
|
+
- spec/adapters/logger_spec.rb
|
178
|
+
- spec/adapters/tagged_logging_spec.rb
|
179
|
+
- spec/adapters_spec.rb
|
172
180
|
- spec/middleware_spec.rb
|
173
181
|
- spec/spec_helper.rb
|
174
182
|
- spec/support/test.log
|
@@ -192,11 +200,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
192
200
|
version: '0'
|
193
201
|
requirements: []
|
194
202
|
rubyforge_project:
|
195
|
-
rubygems_version: 2.2.
|
203
|
+
rubygems_version: 2.2.5
|
196
204
|
signing_key:
|
197
205
|
specification_version: 4
|
198
206
|
summary: Rack middleware to output rails logs to a webpage
|
199
207
|
test_files:
|
208
|
+
- spec/adapters/base_spec.rb
|
209
|
+
- spec/adapters/logger_spec.rb
|
210
|
+
- spec/adapters/tagged_logging_spec.rb
|
211
|
+
- spec/adapters_spec.rb
|
200
212
|
- spec/middleware_spec.rb
|
201
213
|
- spec/spec_helper.rb
|
202
214
|
- spec/support/test.log
|