lumberyak 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2542d62276a1c1c56ee45a5108a106063cabec72
4
+ data.tar.gz: 82a9624e5dfbc30b194c0f3629a4d3cec8f1a833
5
+ SHA512:
6
+ metadata.gz: 5eb223c4d0ef4317ef1277d50b8ef3efeb500d0c803c6421e1b689eb1551508e6371811c6fdf1a7adb40801e83439e23895a57aa350ed87231c9f36c9cb03b61
7
+ data.tar.gz: f66379861291b2ca798ba869442dbe8dde0bf469f77f258243533a503e778a6be1d3bf2dbdc3146ec14e8ec6ebe9e62ad6ad424b86cec2a89018a690a4021a66
@@ -0,0 +1,64 @@
1
+
2
+ module ActiveSupport
3
+ module TaggedLogging
4
+ module Formatter # :nodoc:
5
+ # This method is invoked when a log event occurs.
6
+ def call(severity, timestamp, progname, message)
7
+ # This scheme of serializing text log messages into a json format is
8
+ # loosely based on the logstasher.log() method found here:
9
+ # https://github.com/shadabahmed/logstasher/blob/master/lib/logstasher.rb#L160
10
+ # The major difference is we use the TaggedLogging formater's tagging ability.
11
+ # As implemented, TaggedLogging expects the proc's it executes return a scalar
12
+ # value which it converts to a string wrapped with brackets. The resulting
13
+ # behavior is logs that take the form of:
14
+ # '[23432342] [234245] error parsing post request'
15
+ # We could have left that intact by say having a tags field in our json doc that
16
+ # points to our list of tags, but this lacks context. So what we've done is change
17
+ # the convention in our application.rb to have our callback procs return hashes
18
+ # instead of scalars. This way, we get the context by letting the proc provide keys
19
+ # that describe each value.
20
+ data = { 'level' => severity }
21
+ if message.is_a? StandardError
22
+ e = message
23
+ data['type'] = e.class.to_s
24
+ data['message'] = e.message
25
+ data['backtrace'] = clean_backtrace(e).join("\n ")
26
+ elsif message.respond_to?(:to_hash)
27
+ data.merge!(message.to_hash)
28
+ else
29
+ data['message'] = message
30
+ end
31
+ data['timestamp'] = timestamp.iso8601
32
+
33
+ data.merge!(user_defined_attributes)
34
+
35
+ super(severity, timestamp, progname, data.to_json)
36
+ end
37
+
38
+ def user_defined_attributes
39
+ attrs = {
40
+ "tags" => []
41
+ }
42
+ current_tags.each do |t|
43
+ if t.respond_to?(:to_hash)
44
+ attrs.merge!(t.to_hash)
45
+ else
46
+ attrs["tags"].push(t)
47
+ end
48
+ end
49
+ attrs
50
+ end
51
+
52
+ # Taken from http://stackoverflow.com/a/237846
53
+ def clean_backtrace(exception)
54
+ if backtrace = exception.backtrace
55
+ if defined?(RAILS_ROOT)
56
+ backtrace.map { |line| line.sub RAILS_ROOT, '' }
57
+ else
58
+ backtrace
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,14 @@
1
+
2
+
3
+ # We don't want Log Rage to do any message formatting as our JSON
4
+ # encoding owns this step. Otherwise we end up with a json encoded
5
+ # message within a json blob.
6
+ module Lograge
7
+ module Formatters
8
+ class NoFormat
9
+ def call(data)
10
+ data
11
+ end
12
+ end
13
+ end
14
+ end
data/lib/lumberyak.rb ADDED
@@ -0,0 +1,62 @@
1
+
2
+ require 'active_support'
3
+ require 'rails/railtie'
4
+ require 'lograge'
5
+ require 'lograge/railtie'
6
+ require 'lograge/formatter/noformat'
7
+
8
+ module LumberYak
9
+ module_function
10
+
11
+ mattr_accessor :application
12
+
13
+ def setup(app)
14
+ self.application = app
15
+ setup_logger
16
+ setup_lograge
17
+ setup_logtags
18
+ enable_json_logging
19
+ end
20
+
21
+ class LumberYakRailtie < ::Rails::Railtie
22
+ config.lumberyak = ActiveSupport::OrderedOptions.new
23
+ config.lumberyak.enabled = false
24
+ config.lumberyak.configure_lograge = true
25
+ config.lumberyak.log_tags = nil
26
+
27
+ config.after_initialize do |app|
28
+ LumberYak.setup(app) if app.config.lumberyak.enabled
29
+ end
30
+ end
31
+
32
+ def setup_logger
33
+ if application.config.logger
34
+ new_logger = ActiveSupport::TaggedLogging.new(application.config.logger)
35
+ application.config.logger = new_logger
36
+ Rails.logger = new_logger
37
+ end
38
+ end
39
+
40
+ def setup_lograge
41
+ if config.configure_lograge
42
+ application.configure do
43
+ config.lograge.enabled = true
44
+ config.lograge.formatter = Lograge::Formatters::NoFormat.new
45
+ end
46
+ Lograge.setup(application)
47
+ end
48
+ end
49
+
50
+ def setup_logtags
51
+ application.config.log_tags = config.log_tags if config.log_tags
52
+ end
53
+
54
+ def enable_json_logging
55
+ # Explicitly require our monkey patch to ensure it takes effect.
56
+ require 'activesupport/taggedlogging/formatter.rb'
57
+ end
58
+
59
+ def config
60
+ application.config.lumberyak
61
+ end
62
+ end
@@ -0,0 +1,4 @@
1
+
2
+ module LumberYak
3
+ VERSION = "0.1.0".freeze
4
+ end
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lumberyak
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Mark Roddy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-04-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubocop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.43.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.43.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: lograge
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.4'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.4'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activesupport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '4'
62
+ - - "<"
63
+ - !ruby/object:Gem::Version
64
+ version: '5.1'
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '4'
72
+ - - "<"
73
+ - !ruby/object:Gem::Version
74
+ version: '5.1'
75
+ - !ruby/object:Gem::Dependency
76
+ name: actionpack
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '4'
82
+ - - "<"
83
+ - !ruby/object:Gem::Version
84
+ version: '5.1'
85
+ type: :runtime
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '4'
92
+ - - "<"
93
+ - !ruby/object:Gem::Version
94
+ version: '5.1'
95
+ - !ruby/object:Gem::Dependency
96
+ name: railties
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '4'
102
+ - - "<"
103
+ - !ruby/object:Gem::Version
104
+ version: '5.1'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '4'
112
+ - - "<"
113
+ - !ruby/object:Gem::Version
114
+ version: '5.1'
115
+ description: LumberYak enables structured logging via JSON for any Rails application
116
+ email:
117
+ - mroddy@primary.com
118
+ executables: []
119
+ extensions: []
120
+ extra_rdoc_files: []
121
+ files:
122
+ - lib/activesupport/taggedlogging/formatter.rb
123
+ - lib/lograge/formatter/noformat.rb
124
+ - lib/lumberyak.rb
125
+ - lib/lumberyak/version.rb
126
+ homepage: https://github.com/PrimaryKids/lumberyak
127
+ licenses:
128
+ - Apache
129
+ metadata: {}
130
+ post_install_message:
131
+ rdoc_options: []
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ requirements: []
145
+ rubyforge_project:
146
+ rubygems_version: 2.4.5.1
147
+ signing_key:
148
+ specification_version: 4
149
+ summary: Structured Logging for Rails Applications
150
+ test_files: []