event_logger_rails 0.1.0 → 0.2.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/README.md +64 -4
- data/app/controllers/concerns/event_logger_rails/loggable.rb +4 -4
- data/lib/event_logger_rails/event_logger.rb +19 -3
- data/lib/event_logger_rails/version.rb +1 -1
- data/lib/generators/event_logger_rails/install_generator.rb +16 -0
- data/lib/generators/event_logger_rails/templates/event_logger_rails.yml +25 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95ba9a01dfc949b290f6142ac959cc206e705f5b286e2768381a82d6477f424d
|
4
|
+
data.tar.gz: aa992346f7623bb36cd0d12fd83aed155a92a8645c0cfbe8b47ec8c7d22fcc3e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7783f0fae629d0bf417b922a5b93257f22946b7b6b5f5304420341cf9e55f3a6471071fcd3bb36f1b00ed3862f181b6f222306f4975239c1353d24b57a3c94f8
|
7
|
+
data.tar.gz: 6abc431c12d4395ae0b119fb62b26731a8509d22f4b98ac3eeb868a8de27a8255b6ff6b81fc83a8ebb4764643eda90d946a36cf3c1ba81db63b34cf1c26d6e8b
|
data/README.md
CHANGED
@@ -1,28 +1,88 @@
|
|
1
1
|
# EventLoggerRails
|
2
|
-
|
2
|
+
|
3
|
+
Rails gem that facilitates logging events for analysis.
|
3
4
|
|
4
5
|
## Usage
|
5
|
-
|
6
|
+
|
7
|
+
You can define a registry of events that your application emits via the config file (`config/event_logger_rails.yml`).
|
8
|
+
The events that you define are placed in the `registered_events` structure in the config file.
|
9
|
+
|
10
|
+
For example, to register a user signup event, first define the event as a registered event:
|
11
|
+
|
12
|
+
```yaml
|
13
|
+
registered_events:
|
14
|
+
user:
|
15
|
+
signup:
|
16
|
+
success: 'Indicates a user signup was successful.'
|
17
|
+
failure: 'Indicates a user signup was not successful.'
|
18
|
+
```
|
19
|
+
|
20
|
+
Then, from the controller action that processes user signup's, include the `Loggable` concern and use the `log_event` method to log details about the event:
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
class UsersController < ApplicationController
|
24
|
+
include Loggable
|
25
|
+
|
26
|
+
def create
|
27
|
+
user = User.new(user_params)
|
28
|
+
if user.save
|
29
|
+
log_event :info, 'user.signup.success'
|
30
|
+
redirect_to dashboard_path
|
31
|
+
else
|
32
|
+
log_event :error, 'user.signup.failure', errors: user.errors
|
33
|
+
render :new
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
```
|
38
|
+
|
39
|
+
In this example, a possible successful signup could be structured like this:
|
40
|
+
|
41
|
+
```
|
42
|
+
[INFO | 2021-12-27T20:57:06+00:00 | user.signup.success] {"controller"=>"Users", "action"=>"create", "method"=>"POST", "path"=>"/users", "remote_ip"=>"::1", "parameters"=>"{ "user"=>{ "email"=>"validemail@example.com", "first_name"=>"Test", "last_name"=>"User" } }"}
|
43
|
+
```
|
44
|
+
|
45
|
+
...while a failed signup might look like this:
|
46
|
+
|
47
|
+
```
|
48
|
+
[ERROR | 2021-12-27T20:57:06+00:00 | user.signup.failure] {"controller"=>"Users", "action"=>"create", "method"=>"POST", "path"=>"/users", "remote_ip"=>"::1", "parameters"=>"{ "user"=>{ "first_name"=>"Test", "last_name"=>"User" } }", "errors"=>"{ "email"=>"is missing" }"}
|
49
|
+
```
|
50
|
+
|
51
|
+
The log entry indicates the logger level (useful for filtering results), the registered event, and more useful information from the controller and request.
|
52
|
+
This makes it simple use a tool like `awk` or another monitoring solution to parse the logs for emitted events, facilitating troubleshooting and analytics.
|
6
53
|
|
7
54
|
## Installation
|
55
|
+
|
8
56
|
Add this line to your application's Gemfile:
|
9
57
|
|
10
58
|
```ruby
|
11
|
-
gem
|
59
|
+
gem 'event_logger_rails'
|
12
60
|
```
|
13
61
|
|
14
62
|
And then execute:
|
63
|
+
|
15
64
|
```bash
|
16
65
|
$ bundle
|
17
66
|
```
|
18
67
|
|
19
68
|
Or install it yourself as:
|
69
|
+
|
20
70
|
```bash
|
21
71
|
$ gem install event_logger_rails
|
22
72
|
```
|
23
73
|
|
74
|
+
Run the install generator to create a config file (`config/event_logger_rails.yml`):
|
75
|
+
|
76
|
+
```bash
|
77
|
+
$ bin/rails generate event_logger_rails:install
|
78
|
+
```
|
79
|
+
|
80
|
+
Add your events to the generated config file following the structure of the examples.
|
81
|
+
|
24
82
|
## Contributing
|
25
|
-
|
83
|
+
|
84
|
+
Contributions are welcome. Feel free to open a PR.
|
26
85
|
|
27
86
|
## License
|
87
|
+
|
28
88
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
@@ -9,10 +9,10 @@ module EventLoggerRails
|
|
9
9
|
def log_event(level, event, **data)
|
10
10
|
data_to_log = data_from_request.merge(data)
|
11
11
|
EventLoggerRails.log(level, event, **data_to_log)
|
12
|
-
rescue
|
13
|
-
log_event :error, 'event
|
14
|
-
rescue
|
15
|
-
log_event :error, '
|
12
|
+
rescue EventLoggerRails::Exceptions::UnregisteredEvent => e
|
13
|
+
log_event :error, 'event_logger_rails.event.unregistered', message: e.message
|
14
|
+
rescue EventLoggerRails::Exceptions::InvalidLoggerLevel => e
|
15
|
+
log_event :error, 'event_logger_rails.logger_level.invalid', message: e.message
|
16
16
|
end
|
17
17
|
|
18
18
|
def data_from_request
|
@@ -9,6 +9,13 @@ module EventLoggerRails
|
|
9
9
|
##
|
10
10
|
# Outputs event and related data logs.
|
11
11
|
class EventLogger
|
12
|
+
DEFAULT_EVENTS = [
|
13
|
+
'event_logger_rails.logger_level.invalid',
|
14
|
+
'event_logger_rails.event.unregistered',
|
15
|
+
'event_logger_rails.event.testing'
|
16
|
+
].freeze
|
17
|
+
private_constant :DEFAULT_EVENTS
|
18
|
+
|
12
19
|
def initialize
|
13
20
|
@logger_levels = logger_levels_from_config
|
14
21
|
@registered_events = registered_events_from_config
|
@@ -37,11 +44,11 @@ module EventLoggerRails
|
|
37
44
|
end
|
38
45
|
|
39
46
|
def data_from_config
|
40
|
-
|
47
|
+
YAML.safe_load(File.read(config_file)).deep_symbolize_keys
|
41
48
|
end
|
42
49
|
|
43
50
|
def config_file
|
44
|
-
Rails.root.join('config/
|
51
|
+
Rails.root.join('config/event_logger_rails.yml')
|
45
52
|
end
|
46
53
|
|
47
54
|
def reload_config
|
@@ -67,11 +74,20 @@ module EventLoggerRails
|
|
67
74
|
end
|
68
75
|
|
69
76
|
def validate_event(event)
|
70
|
-
return true if
|
77
|
+
return true if event_registered?(event) || default_event?(event)
|
71
78
|
|
72
79
|
raise EventLoggerRails::Exceptions::UnregisteredEvent.new(unregistered_event: event)
|
73
80
|
end
|
74
81
|
|
82
|
+
def event_registered?(event)
|
83
|
+
parsed_event = event.split('.').map(&:to_sym)
|
84
|
+
registered_events.dig(*parsed_event)
|
85
|
+
end
|
86
|
+
|
87
|
+
def default_event?(event)
|
88
|
+
DEFAULT_EVENTS.include?(event)
|
89
|
+
end
|
90
|
+
|
75
91
|
def output_device
|
76
92
|
return $stdout unless Rails.env.test?
|
77
93
|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EventLoggerRails
|
4
|
+
module Generators
|
5
|
+
##
|
6
|
+
# Creates basic config file for EventLoggerRails
|
7
|
+
class InstallGenerator < Rails::Generators::Base
|
8
|
+
desc 'Create basic config file for EventLoggerRails'
|
9
|
+
source_root File.expand_path('templates', __dir__)
|
10
|
+
|
11
|
+
def copy_config_file
|
12
|
+
copy_file 'event_logger_rails.yml', 'config/event_logger_rails.yml'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
##
|
2
|
+
# Allowed logger levels for use with EventLoggerRails
|
3
|
+
# You can add/remove levels, if desired; however, an exception will occur
|
4
|
+
# when using a logger level that is not enumerated here.
|
5
|
+
#
|
6
|
+
logger_levels:
|
7
|
+
- 'debug'
|
8
|
+
- 'info'
|
9
|
+
- 'warn'
|
10
|
+
- 'error'
|
11
|
+
- 'fatal'
|
12
|
+
|
13
|
+
##
|
14
|
+
# Registered events for use with EventLoggerRails
|
15
|
+
# Add your custom event definitions to this section; attempting to log events
|
16
|
+
# that are not registered here will result in an exception.
|
17
|
+
#
|
18
|
+
# Example event:
|
19
|
+
#
|
20
|
+
# registered_events:
|
21
|
+
# user:
|
22
|
+
# signup:
|
23
|
+
# success: 'Indicates a successful user signup.'
|
24
|
+
#
|
25
|
+
registered_events:
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: event_logger_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dick Davis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-12-
|
11
|
+
date: 2021-12-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -41,6 +41,8 @@ files:
|
|
41
41
|
- lib/event_logger_rails/exceptions/invalid_logger_level.rb
|
42
42
|
- lib/event_logger_rails/exceptions/unregistered_event.rb
|
43
43
|
- lib/event_logger_rails/version.rb
|
44
|
+
- lib/generators/event_logger_rails/install_generator.rb
|
45
|
+
- lib/generators/event_logger_rails/templates/event_logger_rails.yml
|
44
46
|
- lib/tasks/event_logger_rails_tasks.rake
|
45
47
|
homepage: https://github.com/d3d1rty/event_logger_rails
|
46
48
|
licenses:
|