logster 0.0.9 → 0.0.10
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/README.md +10 -4
- data/assets/javascript/app.js +12 -1
- data/lib/logster/configuration.rb +1 -1
- data/lib/logster/logger.rb +4 -1
- data/lib/logster/message.rb +10 -0
- data/lib/logster/middleware/debug_exceptions.rb +19 -0
- data/lib/logster/middleware/reporter.rb +4 -2
- data/lib/logster/middleware/viewer.rb +1 -2
- data/lib/logster/rails/railtie.rb +7 -8
- data/lib/logster/version.rb +1 -1
- data/lib/logster/web.rb +8 -0
- data/lib/logster.rb +4 -0
- data/test/logster/middleware/test_reporter.rb +21 -0
- data/test/logster/test_redis_store.rb +14 -5
- data/test/test_helper.rb +11 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eadf4ac198a2256f98ce3bfcb70be74dbe2056eb
|
4
|
+
data.tar.gz: c85f2dac78f07d7cc0b77eedcafd1572942e9ebe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: caee98bce33d83120e194452898da0533a1ffcd180c05f8c893563b0039d453b3cd6620cf9a5ffa333722ee1cabc17eefb1c2c61acddfb31afb739f61642b2c9
|
7
|
+
data.tar.gz: 7b35e552e33df43b0d3e513f68cc380b21064b48df88b82f5aaa333345844b457f7f677a0ef79a1492e4049cf9bb5d2d91b1333bb42fdc6abaf73a2c60723c85
|
data/README.md
CHANGED
@@ -17,15 +17,17 @@ And then execute:
|
|
17
17
|
|
18
18
|
$ bundle
|
19
19
|
|
20
|
-
Logster will wire up `/logs` path in your Rails app in **development** mode only.
|
20
|
+
Logster will wire up `/logs` path in your Rails app in **development** mode only. To wire up in production you will need to set
|
21
21
|
|
22
|
-
|
22
|
+
```
|
23
|
+
Logster.config.authorize_callback = lambda{|env| your_own_can_see_logs? }
|
24
|
+
```
|
23
25
|
|
24
|
-
|
26
|
+
## Usage
|
25
27
|
|
26
28
|
The concept is to have an embedded "exception reporting service" admins can view on live sites.
|
27
29
|
|
28
|
-
Logs will be visible by default at `http://sitename.com/logs
|
30
|
+
Logs will be visible by default at `http://sitename.com/logs`
|
29
31
|
|
30
32
|
## Thanks
|
31
33
|
|
@@ -56,3 +58,7 @@ Logster UI is built using [Ember.js](http://emberjs.com/)
|
|
56
58
|
- Fix pacakging binstubs by mistake
|
57
59
|
- 2014-05-13: Version 0.0.9
|
58
60
|
- Stray debugger message removed, add window.location logging to js
|
61
|
+
- 2014-05-24: Version 0.0.10
|
62
|
+
- Correct context for error reporting
|
63
|
+
- Clean up backtraces of reported exceptions
|
64
|
+
- Report params in env tab
|
data/assets/javascript/app.js
CHANGED
@@ -62,8 +62,19 @@ App.Message = Ember.Object.extend({
|
|
62
62
|
if(env){
|
63
63
|
var buffer = [];
|
64
64
|
_.each(env, function(v,k){
|
65
|
-
|
65
|
+
if(k !== "params"){
|
66
|
+
buffer.push(k + ": " + v);
|
67
|
+
}
|
66
68
|
});
|
69
|
+
|
70
|
+
buffer.push("");
|
71
|
+
if(_.size(env.params) > 0){
|
72
|
+
buffer.push("Params:");
|
73
|
+
buffer.push("");
|
74
|
+
_.each(env.params, function(v,k){
|
75
|
+
buffer.push(" " + k + ": " + v);
|
76
|
+
});
|
77
|
+
}
|
67
78
|
return buffer.join("\n");
|
68
79
|
}
|
69
80
|
|
data/lib/logster/logger.rb
CHANGED
@@ -4,7 +4,7 @@ module Logster
|
|
4
4
|
class Logger < ::Logger
|
5
5
|
LOGSTER_ENV = "logster_env".freeze
|
6
6
|
|
7
|
-
attr_accessor :store
|
7
|
+
attr_accessor :store, :skip_store
|
8
8
|
|
9
9
|
def initialize(store)
|
10
10
|
super(nil)
|
@@ -16,6 +16,7 @@ module Logster
|
|
16
16
|
@chained << logger
|
17
17
|
end
|
18
18
|
|
19
|
+
|
19
20
|
def add(severity, message, progname, &block)
|
20
21
|
if severity < @level
|
21
22
|
return true
|
@@ -41,6 +42,8 @@ module Logster
|
|
41
42
|
end
|
42
43
|
end
|
43
44
|
|
45
|
+
return if @skip_store
|
46
|
+
|
44
47
|
@store.report(severity, progname, message, {
|
45
48
|
env: Thread.current[LOGSTER_ENV]
|
46
49
|
})
|
data/lib/logster/message.rb
CHANGED
@@ -59,6 +59,16 @@ module Logster
|
|
59
59
|
def self.populate_from_env(env)
|
60
60
|
env[LOGSTER_ENV] ||= begin
|
61
61
|
scrubbed = {}
|
62
|
+
request = Rack::Request.new(env)
|
63
|
+
params = {}
|
64
|
+
request.params.each do |k,v|
|
65
|
+
if k.include? "password"
|
66
|
+
params[k] = "[reducted]"
|
67
|
+
else
|
68
|
+
params[k] = v[0..100]
|
69
|
+
end
|
70
|
+
end
|
71
|
+
scrubbed["params"] = params if params.length > 0
|
62
72
|
ALLOWED_ENV.map{ |k|
|
63
73
|
scrubbed[k] = env[k] if env[k]
|
64
74
|
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Logster::Middleware::DebugExceptions < ActionDispatch::DebugExceptions
|
2
|
+
private
|
3
|
+
|
4
|
+
def log_error(env,wrapper)
|
5
|
+
Logster.logger.skip_store = true
|
6
|
+
exception = wrapper.exception
|
7
|
+
|
8
|
+
Logster.config.current_context.call(env) do
|
9
|
+
Logster.store.report(::Logger::Severity::FATAL,
|
10
|
+
"web",
|
11
|
+
exception.class.to_s << " (" << exception.to_s << ")",
|
12
|
+
backtrace: exception.backtrace.join("\n"),
|
13
|
+
env: env)
|
14
|
+
end
|
15
|
+
super(env, wrapper)
|
16
|
+
ensure
|
17
|
+
Logster.logger.skip_store = false
|
18
|
+
end
|
19
|
+
end
|
@@ -14,7 +14,10 @@ module Logster
|
|
14
14
|
|
15
15
|
path = env[PATH_INFO]
|
16
16
|
if path == @error_path
|
17
|
-
|
17
|
+
Logster.config.current_context.call(env) do
|
18
|
+
report_js_error(env)
|
19
|
+
end
|
20
|
+
return [200,{},["OK"]]
|
18
21
|
end
|
19
22
|
|
20
23
|
@app.call(env)
|
@@ -36,7 +39,6 @@ module Logster
|
|
36
39
|
message,
|
37
40
|
backtrace: backtrace,
|
38
41
|
env: env)
|
39
|
-
[200,{},["OK"]]
|
40
42
|
end
|
41
43
|
|
42
44
|
end
|
@@ -16,7 +16,6 @@ module Logster
|
|
16
16
|
|
17
17
|
@assets_path = File.expand_path("../../../../assets", __FILE__)
|
18
18
|
@fileserver = Rack::File.new(@assets_path)
|
19
|
-
@authorize_callback = Logster.config.authorize_callback
|
20
19
|
end
|
21
20
|
|
22
21
|
def call(env)
|
@@ -29,7 +28,7 @@ module Logster
|
|
29
28
|
|
30
29
|
if resource = resolve_path(path)
|
31
30
|
|
32
|
-
return @app.call(env) if
|
31
|
+
return @app.call(env) if !Logster.config.authorize_callback.call(env)
|
33
32
|
|
34
33
|
if resource =~ /\.js$|\.handlebars$|\.css$/
|
35
34
|
env[PATH_INFO] = resource
|
@@ -8,7 +8,7 @@ module Logster::Rails
|
|
8
8
|
return unless Rails.env.development? || Rails.env.production?
|
9
9
|
|
10
10
|
if defined?(Redis)
|
11
|
-
require 'logster/middleware/
|
11
|
+
require 'logster/middleware/debug_exceptions'
|
12
12
|
require 'logster/middleware/reporter'
|
13
13
|
require 'logster/redis_store'
|
14
14
|
|
@@ -25,18 +25,14 @@ module Logster::Rails
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
|
28
29
|
def self.initialize!(app)
|
29
30
|
return unless Rails.env.development? || Rails.env.production?
|
30
31
|
|
31
32
|
if Logster::Logger === Rails.logger
|
32
|
-
if Rails.env.development?
|
33
|
-
# in production you must mount in routes.rb
|
34
|
-
# or by inserting middleware
|
35
|
-
app.middleware.use Logster::Middleware::Viewer
|
36
|
-
end
|
37
|
-
|
38
33
|
app.middleware.insert_before ActionDispatch::ShowExceptions, Logster::Middleware::Reporter
|
39
|
-
|
34
|
+
app.middleware.insert_before ActionDispatch::DebugExceptions, Logster::Middleware::DebugExceptions, Rails.application
|
35
|
+
app.middleware.delete ActionDispatch::DebugExceptions
|
40
36
|
app.config.colorize_logging = false
|
41
37
|
end
|
42
38
|
end
|
@@ -44,6 +40,9 @@ module Logster::Rails
|
|
44
40
|
class Railtie < ::Rails::Railtie
|
45
41
|
|
46
42
|
config.before_initialize do
|
43
|
+
Logster.config.authorize_callback = lambda {|env|
|
44
|
+
Rails.env == "development"
|
45
|
+
}
|
47
46
|
Logster::Rails.set_logger(config)
|
48
47
|
end
|
49
48
|
|
data/lib/logster/version.rb
CHANGED
data/lib/logster/web.rb
ADDED
data/lib/logster.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'logster/logger'
|
2
2
|
require 'logster/message'
|
3
3
|
require 'logster/configuration'
|
4
|
+
require 'logster/web'
|
4
5
|
|
5
6
|
module Logster
|
6
7
|
def self.logger=(logger)
|
@@ -33,6 +34,9 @@ module Logster
|
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
37
|
+
Logster.config.current_context = lambda{|env, &block| block.call}
|
38
|
+
Logster.config.authorize_callback = lambda{|env| true}
|
39
|
+
|
36
40
|
if defined?(::Rails) && ::Rails::VERSION::MAJOR.to_i >= 3
|
37
41
|
require 'logster/rails/railtie'
|
38
42
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
require 'rack'
|
3
|
+
require 'logster/redis_store'
|
4
|
+
require 'logster/middleware/reporter'
|
5
|
+
|
6
|
+
|
7
|
+
class TestReporter < Minitest::Test
|
8
|
+
|
9
|
+
def test_logs_errors
|
10
|
+
Logster.store = Logster::TestStore.new
|
11
|
+
|
12
|
+
reporter = Logster::Middleware::Reporter.new(nil)
|
13
|
+
env = Rack::MockRequest.env_for("/logs/report_js_error?message=hello")
|
14
|
+
status, = reporter.call(env)
|
15
|
+
|
16
|
+
assert_equal(200, status)
|
17
|
+
assert_equal(1, Logster.store.reported.length)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative '../test_helper'
|
2
2
|
require 'logster/redis_store'
|
3
|
+
require 'rack'
|
3
4
|
|
4
5
|
class TestRedisStore < Minitest::Test
|
5
6
|
|
@@ -148,18 +149,26 @@ class TestRedisStore < Minitest::Test
|
|
148
149
|
end
|
149
150
|
|
150
151
|
def test_env
|
151
|
-
env = {
|
152
|
-
"REQUEST_URI" => "/test",
|
152
|
+
env = Rack::MockRequest.env_for("/test").merge({
|
153
153
|
"HTTP_HOST" => "www.site.com",
|
154
|
-
"REQUEST_METHOD" => "GET",
|
155
154
|
"HTTP_USER_AGENT" => "SOME WHERE"
|
156
|
-
}
|
155
|
+
})
|
157
156
|
orig = env.dup
|
158
157
|
orig["test"] = "tests"
|
159
158
|
orig["test1"] = "tests1"
|
160
|
-
|
161
159
|
Logster.add_to_env(env,"test","tests")
|
162
160
|
Logster.add_to_env(env,"test1","tests1")
|
161
|
+
|
162
|
+
orig.delete_if do |k,v|
|
163
|
+
!%w{
|
164
|
+
HTTP_HOST
|
165
|
+
REQUEST_METHOD
|
166
|
+
HTTP_USER_AGENT
|
167
|
+
test
|
168
|
+
test1
|
169
|
+
}.include? k
|
170
|
+
end
|
171
|
+
|
163
172
|
@store.report(Logger::INFO, "test", "test", env: env)
|
164
173
|
assert_equal(orig, @store.latest.last.env)
|
165
174
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- UI for viewing logs in Rack
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -125,12 +125,15 @@ files:
|
|
125
125
|
- lib/logster/configuration.rb
|
126
126
|
- lib/logster/logger.rb
|
127
127
|
- lib/logster/message.rb
|
128
|
+
- lib/logster/middleware/debug_exceptions.rb
|
128
129
|
- lib/logster/middleware/reporter.rb
|
129
130
|
- lib/logster/middleware/viewer.rb
|
130
131
|
- lib/logster/rails/railtie.rb
|
131
132
|
- lib/logster/redis_store.rb
|
132
133
|
- lib/logster/version.rb
|
134
|
+
- lib/logster/web.rb
|
133
135
|
- logster.gemspec
|
136
|
+
- test/logster/middleware/test_reporter.rb
|
134
137
|
- test/logster/middleware/test_viewer.rb
|
135
138
|
- test/logster/test_logger.rb
|
136
139
|
- test/logster/test_redis_store.rb
|
@@ -161,6 +164,7 @@ signing_key:
|
|
161
164
|
specification_version: 4
|
162
165
|
summary: UI for viewing logs in Rack
|
163
166
|
test_files:
|
167
|
+
- test/logster/middleware/test_reporter.rb
|
164
168
|
- test/logster/middleware/test_viewer.rb
|
165
169
|
- test/logster/test_logger.rb
|
166
170
|
- test/logster/test_redis_store.rb
|