oh_my_log 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +10 -4
- data/Appraisals +9 -7
- data/README.md +30 -2
- data/blue_print/oh_my_log_initializer.rb +2 -4
- data/gemfiles/rails_4.2_stable.gemfile +2 -1
- data/gemfiles/rails_5.0_stable.gemfile +1 -1
- data/gemfiles/rails_5.1_stable.gemfile +1 -1
- data/gemfiles/rails_5.2_stable.gemfile +1 -1
- data/lib/oh_my_log/configuration.rb +9 -3
- data/lib/oh_my_log/log.rb +21 -3
- data/lib/oh_my_log/observer_factory.rb +3 -4
- data/lib/oh_my_log/orm/active_record.rb +10 -0
- data/lib/oh_my_log/orm/mongoid.rb +4 -0
- data/lib/oh_my_log/request.rb +4 -3
- data/lib/oh_my_log/result.rb +11 -4
- data/lib/oh_my_log/selector.rb +5 -4
- data/lib/oh_my_log/syslog_configuration.rb +30 -0
- data/lib/oh_my_log/syslog_implementor.rb +71 -0
- data/lib/oh_my_log/syslog_processors/r_f_c_3164.rb +36 -0
- data/lib/oh_my_log/version.rb +1 -1
- data/lib/oh_my_log.rb +19 -19
- data/lib/tasks/oh_my_log.rake +6 -0
- data/oh_my_log.gemspec +4 -2
- data/spec/controllers/foos_controller_spec.rb +31 -0
- data/spec/dummy/app/models/application_record.rb +10 -3
- data/spec/dummy/app/models/doo.rb +6 -0
- data/spec/dummy/app/models/foo.rb +6 -0
- data/spec/dummy/config/application.rb +3 -2
- data/spec/dummy/config/environments/test.rb +10 -11
- data/spec/dummy/config/initializers/migration_class.rb +10 -6
- data/spec/dummy/config/mongoid.yml +6 -0
- data/spec/orm/active_record.rb +12 -0
- data/spec/orm/mongoid.rb +11 -0
- data/spec/spec_helper.rb +6 -10
- data/spec/support/mongoid.yml +6 -0
- metadata +52 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c4268bb618f37425f9cd4b005699fc75d43902b54a612b9bd49f26ae32e9997
|
4
|
+
data.tar.gz: 8f81f6d1c522e22db26ef46e4f04476dba1af2f3cedf63ec4256bc56dbbd2c16
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d8ab1ac0d258c0938eedc7ec31320e179c27e920d579c7bd3a1e4d4548a2290fa18fc24bab063378a8d919415eaf497ebe12904a1ec8ef9bcd29d6eed3ca190
|
7
|
+
data.tar.gz: 7a49e9f1fc303ed1ed39e21a0d45a9674c453f603aed0864f33306c4d71b8d16d7e6b956f5d213c7aab5ff1f7502b87f873aeba99e016bac192df77b3afea8ab
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.3
|
1
|
+
2.3.0
|
data/.travis.yml
CHANGED
@@ -2,12 +2,18 @@ language: ruby
|
|
2
2
|
before_install: gem install bundler -v '1.17.3'
|
3
3
|
install: bundle _1.17.3_ install --jobs=3 --retry=3
|
4
4
|
script: bundle exec rspec
|
5
|
+
services:
|
6
|
+
- mongodb
|
5
7
|
rvm:
|
6
8
|
- 2.3.0
|
7
9
|
- 2.4.0
|
8
10
|
- 2.5.0
|
9
11
|
- 2.6.0
|
10
12
|
- ruby-head
|
13
|
+
env:
|
14
|
+
matrix:
|
15
|
+
- OHMYLOG_ORM=active_record
|
16
|
+
- OHMYLOG_ORM=mongoid
|
11
17
|
matrix:
|
12
18
|
exclude:
|
13
19
|
# Skip these combinations because they have incompatible dependencies
|
@@ -16,10 +22,10 @@ matrix:
|
|
16
22
|
gemfile: gemfiles/rails_4.2_stable.gemfile
|
17
23
|
- rvm: ruby-head
|
18
24
|
gemfile: gemfiles/rails_4.2_stable.gemfile
|
19
|
-
# - rvm: 2.3
|
20
|
-
# gemfile: gemfiles/rails_6.0_beta.gemfile
|
21
|
-
# - rvm: 2.4
|
22
|
-
# gemfile: gemfiles/rails_6.0_beta.gemfile
|
25
|
+
# - rvm: 2.3
|
26
|
+
# gemfile: gemfiles/rails_6.0_beta.gemfile
|
27
|
+
# - rvm: 2.4
|
28
|
+
# gemfile: gemfiles/rails_6.0_beta.gemfile
|
23
29
|
allow_failures:
|
24
30
|
# - gemfile: gemfiles/rails_6.0_beta.gemfile
|
25
31
|
# - rvm: ruby-head
|
data/Appraisals
CHANGED
@@ -1,25 +1,27 @@
|
|
1
1
|
appraise 'rails-4.2-stable' do
|
2
2
|
gem 'rails', '~> 4.2.0'
|
3
|
-
gem '
|
3
|
+
gem 'bundler', '< 2'
|
4
|
+
gem "mongoid", "~> 4.0"
|
4
5
|
end
|
5
6
|
|
6
7
|
appraise 'rails-5.0-stable' do
|
7
8
|
gem 'rails', '~> 5.0.0'
|
8
|
-
gem
|
9
|
+
gem "mongoid", "~> 6.0"
|
9
10
|
end
|
10
11
|
|
11
12
|
appraise 'rails-5.1-stable' do
|
12
13
|
gem 'rails', '~> 5.1.0'
|
13
|
-
gem
|
14
|
+
gem "mongoid", "~> 6.0"
|
14
15
|
end
|
15
16
|
|
16
|
-
|
17
17
|
appraise 'rails-5.2-stable' do
|
18
18
|
gem 'rails', '~> 5.2.0'
|
19
|
-
gem
|
19
|
+
gem "mongoid", "~> 6.0"
|
20
20
|
end
|
21
21
|
|
22
22
|
# appraise 'rails-6.0-beta' do
|
23
|
-
# gem 'rails', '~> 6.0.0.
|
24
|
-
#
|
23
|
+
# gem 'rails', '~> 6.0.0.beta3'
|
24
|
+
# group :mongoid do
|
25
|
+
# gem "mongoid", "~> 6.0"
|
26
|
+
# end
|
25
27
|
# end
|
data/README.md
CHANGED
@@ -85,6 +85,8 @@ When using multiple selectors remember that if any of the conditions among all s
|
|
85
85
|
|
86
86
|
>[read only] status_codes Hash(the key is the rule: ONLY/EXCEPT/ALL the value is an array of status codes)
|
87
87
|
|
88
|
+
>[read only] methods Hash(the key is the rule: ONLY/EXCEPT/ALL the value is an array of methods)
|
89
|
+
|
88
90
|
###### Instance methods:
|
89
91
|
|
90
92
|
>set_controllers (controller ->Hash{string =>string[]})
|
@@ -95,10 +97,11 @@ When using multiple selectors remember that if any of the conditions among all s
|
|
95
97
|
|
96
98
|
>set_status_codes (status_codes ->Hash{string =>Range[]})
|
97
99
|
|
100
|
+
>set_methods (methods ->Hash{string =>string[]})
|
101
|
+
|
98
102
|
###### Class methods:
|
99
103
|
|
100
|
-
>universal_for(action: {"ALL" =>[]}, controllers: {"ALL" =>[]}
|
101
|
-
except you can put an array of actions)
|
104
|
+
>universal_for(action: {"ALL" =>[]}, controllers: {"ALL" =>[]}, methods: {"ALL" =>[]})
|
102
105
|
|
103
106
|
Complex initializer example:
|
104
107
|
|
@@ -109,6 +112,7 @@ OhMyLog::Log.configure do |config|
|
|
109
112
|
selector.set_controllers("EXCEPT" =>["ApplicationController"])
|
110
113
|
selector.set_actions("ONLY" =>["index","create","destroy"])
|
111
114
|
selector.set_status_codes("ONLY" =>[(0..200)])
|
115
|
+
selector.set_methods("EXCEPT" =>["GET"])
|
112
116
|
selector.set_ips("EXCEPT"=>["192.168.0.1"])
|
113
117
|
config.add_selector(selector)
|
114
118
|
#put your configs here
|
@@ -174,6 +178,30 @@ end
|
|
174
178
|
>changes string (changes that this model had before and after the action)
|
175
179
|
|
176
180
|
---
|
181
|
+
|
182
|
+
#### OhMyLog::SyslogConfiguration
|
183
|
+
|
184
|
+
###### Class methods:
|
185
|
+
|
186
|
+
>[read only] processor_name string (the name of the processor in use)
|
187
|
+
|
188
|
+
>[read only] operation string/symbol (the operation to execute when the message is bigger that 1024 byte)
|
189
|
+
|
190
|
+
>use (processor_name, operation) (the name of the processor and the operation to apply)
|
191
|
+
|
192
|
+
>change_processor(processor_name)
|
193
|
+
|
194
|
+
>change_operation(operation) (supported operations are: split and trim)
|
195
|
+
---
|
196
|
+
|
197
|
+
### How to configure a syslog ready log:
|
198
|
+
* Include this in the config proc of the initializer:
|
199
|
+
|
200
|
+
```sh
|
201
|
+
OhMyLog::SyslogConfiguration.use("RFC3164")
|
202
|
+
syslog = OhMyLog::SyslogImplementor.new(hostname: "Staging", priority: 101, tag: "HELLO", program_name: "WORLD")
|
203
|
+
config.syslog = syslog
|
204
|
+
```
|
177
205
|
|
178
206
|
### Development
|
179
207
|
|
@@ -1,8 +1,6 @@
|
|
1
1
|
OhMyLog::Log.configure do |config|
|
2
2
|
config.print_log = true
|
3
3
|
selector = OhMyLog::Log::Selector.universal_for(actions: {"EXCEPT" => ["index"]})
|
4
|
-
#selector.set_status_codes("ONLY" => [(0..200)])
|
5
4
|
config.add_selector(selector)
|
6
|
-
|
7
|
-
|
8
|
-
end
|
5
|
+
end
|
6
|
+
OhMyLog.start
|
@@ -1,16 +1,17 @@
|
|
1
1
|
module OhMyLog
|
2
2
|
module Log
|
3
3
|
class Configuration
|
4
|
-
attr_accessor :models, :print_log, :record_history, :log_instance, :
|
5
|
-
attr_reader :selectors
|
4
|
+
attr_accessor :models, :print_log, :record_history, :log_instance, :syslog
|
5
|
+
attr_reader :selectors, :log_path
|
6
6
|
|
7
7
|
def initialize(*args)
|
8
8
|
@selectors = []
|
9
9
|
#models not to track
|
10
10
|
@models = {"ALL" => []}
|
11
11
|
@print_log = true
|
12
|
-
@log_instance = Logger.new(File.join(Rails.root, 'log/oh_my_log.log'))
|
12
|
+
@log_instance = Logger.new(File.join(Rails.root, 'log/oh_my_log.log')) unless @log_path
|
13
13
|
@log_path = nil
|
14
|
+
@syslog = nil
|
14
15
|
#do we wanna keep track of all the actions?
|
15
16
|
@record_history = false
|
16
17
|
end
|
@@ -23,6 +24,11 @@ module OhMyLog
|
|
23
24
|
@selectors = []
|
24
25
|
end
|
25
26
|
|
27
|
+
def log_path=(path)
|
28
|
+
@log_path = path
|
29
|
+
process_path
|
30
|
+
end
|
31
|
+
|
26
32
|
def get_actions(controller)
|
27
33
|
@selectors.each do |selector|
|
28
34
|
return selector.actions if selector.controller == controller
|
data/lib/oh_my_log/log.rb
CHANGED
@@ -26,7 +26,6 @@ module OhMyLog
|
|
26
26
|
self.history = []
|
27
27
|
yield(configuration)
|
28
28
|
self.configuration.add_selector(Selector.universal_for) if self.configuration.selectors.empty?
|
29
|
-
self.configuration.process_path
|
30
29
|
end
|
31
30
|
|
32
31
|
def self.clear
|
@@ -113,19 +112,38 @@ module OhMyLog
|
|
113
112
|
return permitted_action
|
114
113
|
end
|
115
114
|
|
115
|
+
def self.permitted_method?(selector, ctrl_method)
|
116
|
+
permitted_method = true
|
117
|
+
case selector.methods.keys[0]
|
118
|
+
when "EXCEPT"
|
119
|
+
selector.methods.values[0].each {|method| permitted_method = false if method.upcase.to_sym == ctrl_method}
|
120
|
+
when "ONLY"
|
121
|
+
selector.methods.values[0].each {|method| permitted_method = true if method.upcase.to_sym == ctrl_method}
|
122
|
+
when "ALL"
|
123
|
+
permitted_method = true
|
124
|
+
else
|
125
|
+
raise "UNDEFINED RULE: please us any of [ONLY/EXCEPT/ALL]"
|
126
|
+
end
|
127
|
+
return permitted_method
|
128
|
+
end
|
129
|
+
|
116
130
|
#TODO: implement filtering by method
|
117
131
|
def self.loggable?(params, status, method)
|
118
132
|
ctrl_name = params["controller"]
|
119
133
|
ctrl_action = params["action"].to_sym
|
134
|
+
ctrl_method = method.to_sym
|
120
135
|
final_response = false
|
121
136
|
self.configuration.selectors.each do |selector|
|
122
137
|
final_response = permitted_range?(selector, status)
|
123
138
|
return false unless final_response
|
124
139
|
|
125
|
-
final_response
|
140
|
+
final_response &= permitted_method?(selector, ctrl_method)
|
141
|
+
return false unless final_response
|
142
|
+
|
143
|
+
final_response &= permitted_controller?(selector, ctrl_name)
|
126
144
|
return false unless final_response
|
127
145
|
|
128
|
-
final_response
|
146
|
+
final_response &= permitted_ip?(selector, Thread.current[:remote_ip])
|
129
147
|
return false unless final_response
|
130
148
|
|
131
149
|
return false unless permitted_action?(selector, ctrl_action)
|
@@ -19,8 +19,7 @@ module OhMyLog
|
|
19
19
|
#rebuild folder if it's already there
|
20
20
|
FileUtils.rm_rf(Rails.root + "app/models/observers/oh_my_log") if File.directory?(Rails.root + "app/models/observers/oh_my_log")
|
21
21
|
FileUtils.mkdir_p(Rails.root + "app/models/observers/oh_my_log")
|
22
|
-
generate_collection_for(
|
23
|
-
generate_collection_for(Mongoid) if defined?(Mongoid)
|
22
|
+
generate_collection_for(OHMYLOG_ORM.to_s.classify.constantize)
|
24
23
|
end
|
25
24
|
|
26
25
|
def self.remove_collection
|
@@ -69,10 +68,10 @@ module OhMyLog
|
|
69
68
|
config_rule = Log.configuration_rule
|
70
69
|
config_models = Log.configuration_models
|
71
70
|
models = []
|
72
|
-
if klass == ActiveRecord
|
71
|
+
if klass.to_s == 'ActiveRecord'
|
73
72
|
models = ActiveRecord::Base.subclasses.collect {|type| type.name}
|
74
73
|
models = models + ApplicationRecord.subclasses.collect {|type| type.name} if defined?(ApplicationRecord)
|
75
|
-
elsif klass == Mongoid
|
74
|
+
elsif klass.to_s == 'Mongoid'
|
76
75
|
models = Mongoid.models.collect {|type| type.name}
|
77
76
|
end
|
78
77
|
#reject modules
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record'
|
4
|
+
require 'rails-observers'
|
5
|
+
require 'rails/observers/activerecord/base'
|
6
|
+
module ActiveRecord
|
7
|
+
autoload :Observer, 'rails/observers/activerecord/observer'
|
8
|
+
end
|
9
|
+
require_relative "../active_record_observer"
|
10
|
+
|
data/lib/oh_my_log/request.rb
CHANGED
@@ -2,7 +2,7 @@ module OhMyLog
|
|
2
2
|
module Log
|
3
3
|
#the request is what the user is trying to do
|
4
4
|
class Request
|
5
|
-
attr_reader :sender, :date, :params, :method, :status
|
5
|
+
attr_reader :sender, :date, :params, :method, :status, :path
|
6
6
|
|
7
7
|
def initialize(args)
|
8
8
|
@sender = args[:sender]
|
@@ -10,11 +10,12 @@ module OhMyLog
|
|
10
10
|
@params = args[:params]
|
11
11
|
@method = args[:method]
|
12
12
|
@status = args[:status]
|
13
|
+
@path = args[:path]
|
13
14
|
end
|
14
15
|
|
15
16
|
def to_s
|
16
|
-
user_info = @sender.
|
17
|
-
sender =
|
17
|
+
user_info = @sender.email rescue nil
|
18
|
+
sender = user_info || Thread.current["remote_ip"]
|
18
19
|
"#{@date}, #{sender}, #{@method}, #{@params}, #{@status}"
|
19
20
|
end
|
20
21
|
end
|
data/lib/oh_my_log/result.rb
CHANGED
@@ -33,10 +33,17 @@ module OhMyLog
|
|
33
33
|
private
|
34
34
|
|
35
35
|
def print_into_log
|
36
|
-
OhMyLog::Log.configuration.
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
if OhMyLog::Log.configuration.syslog
|
37
|
+
data = OhMyLog::Log.configuration.syslog.print(ip: OhMyLog::Log.configuration.syslog.public_ip, user: @request.sender, url: @request.path, m: @request.method, s: @request.status, p: @request.params, request_time: @request.date)
|
38
|
+
data.each do |data_info|
|
39
|
+
OhMyLog::Log.configuration.log_instance.info(data_info)
|
40
|
+
end
|
41
|
+
else
|
42
|
+
OhMyLog::Log.configuration.log_instance.info('REQUEST')
|
43
|
+
OhMyLog::Log.configuration.log_instance.info(@request.to_s)
|
44
|
+
OhMyLog::Log.configuration.log_instance.info('RESPONSE') unless @effects.empty?
|
45
|
+
@effects.each {|effect| OhMyLog::Log.configuration.log_instance.info(effect.to_s)}
|
46
|
+
end
|
40
47
|
end
|
41
48
|
|
42
49
|
def calculate_effects
|
data/lib/oh_my_log/selector.rb
CHANGED
@@ -2,17 +2,18 @@ module OhMyLog
|
|
2
2
|
module Log
|
3
3
|
#Selector is a set of rule that Log.loggable? will have to respect
|
4
4
|
class Selector
|
5
|
-
attr_reader :controllers, :actions, :status_codes, :ips
|
5
|
+
attr_reader :controllers, :actions, :status_codes, :ips, :methods
|
6
6
|
METHODS = ["GET", "HEAD", "POST", "PATCH", "PUT", "DELETE"].freeze
|
7
7
|
ACTIONS = ["ONLY", "EXCEPT", "ALL"].freeze
|
8
8
|
# TODO: add methods in the same style as anything else
|
9
9
|
# and it will affect the parameter method in the loggable function in LOG.rb
|
10
10
|
# EXCEPT O ONLY
|
11
|
-
def initialize(controllers: default_hash_setting, actions: default_hash_setting, ips: default_hash_setting, status_codes: default_hash_setting)
|
11
|
+
def initialize(controllers: default_hash_setting, actions: default_hash_setting, ips: default_hash_setting, status_codes: default_hash_setting, methods: default_hash_setting)
|
12
12
|
@controllers = controllers
|
13
13
|
@actions = actions
|
14
14
|
@ips = ips
|
15
15
|
@status_codes = status_codes
|
16
|
+
@methods = methods
|
16
17
|
build_attr_setters
|
17
18
|
end
|
18
19
|
|
@@ -36,8 +37,8 @@ module OhMyLog
|
|
36
37
|
end
|
37
38
|
end
|
38
39
|
|
39
|
-
def self.universal_for(actions: default_hash_setting, controllers: default_hash_setting)
|
40
|
-
return Selector.new(controllers: controllers, actions: actions)
|
40
|
+
def self.universal_for(actions: default_hash_setting, controllers: default_hash_setting, methods: default_hash_setting)
|
41
|
+
return Selector.new(controllers: controllers, actions: actions, methods: methods)
|
41
42
|
end
|
42
43
|
end
|
43
44
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module OhMyLog
|
2
|
+
class SyslogConfiguration
|
3
|
+
@@processor_name = "RFC3164"
|
4
|
+
@@split_operation = "split"
|
5
|
+
|
6
|
+
def self.use(processor_name = nil, operation = nil)
|
7
|
+
change_processor(processor_name) if processor_name
|
8
|
+
change_operation(operation) if operation
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.processor_name
|
12
|
+
return @@processor_name
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.split_operation
|
16
|
+
return @@split_operation
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.change_processor(processor_name)
|
20
|
+
raise "We don't support the #{processor_name} format" unless (("SyslogProcessors::#{processor_name.upcase}".constantize) rescue false)
|
21
|
+
@@processor_name = processor_name
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.change_operation(operation)
|
25
|
+
operation = operation.to_s.downcase.to_sym
|
26
|
+
raise ArgumentError "Supported mode are: 'split' or 'trim'" unless [:split, :trim].include? operation
|
27
|
+
@@split_operation = operation
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require_relative 'syslog_configuration'
|
2
|
+
require 'net/http'
|
3
|
+
require 'syslog/logger'
|
4
|
+
require 'securerandom'
|
5
|
+
|
6
|
+
module OhMyLog
|
7
|
+
class SyslogImplementor
|
8
|
+
include "::SyslogProcessors::#{OhMyLog::SyslogConfiguration.processor_name.upcase}".constantize
|
9
|
+
attr_accessor :facility, :severity
|
10
|
+
attr_reader :public_ip, :tag
|
11
|
+
|
12
|
+
def initialize(hostname: nil, priority: nil, facility: nil, severity: nil, tag: nil, program_name: "NA", syslog_facility: "Syslog::LOG_LOCAL1")
|
13
|
+
@hostname = retrive_hostname
|
14
|
+
@public_ip = retrive_public_ip
|
15
|
+
@priority = priority
|
16
|
+
@facility = facility
|
17
|
+
@severity = severity
|
18
|
+
@tag = tag
|
19
|
+
@program_name = program_name
|
20
|
+
@syslog_facility = syslog_facility
|
21
|
+
OhMyLog::Log.configuration.log_instance = Syslog::Logger.new program_name, syslog_facility.constantize
|
22
|
+
# override_log_formatter
|
23
|
+
end
|
24
|
+
|
25
|
+
def new_using(processor_name)
|
26
|
+
OhMyLog::SyslogConfiguration.use(processor_name)
|
27
|
+
SyslogImplementor.new(hostname: @hostname, priority: @priority, facility: @facility, severity: @severity, tag: @tag, program_name: @program_name, syslog_facility: @syslog_facility)
|
28
|
+
end
|
29
|
+
|
30
|
+
#TODO no need to pass :ip we can retrieve it from this class
|
31
|
+
def print(params)
|
32
|
+
data = [super(params)]
|
33
|
+
if data[0].bytesize >= 1024
|
34
|
+
if OhMyLog::SyslogConfiguration.split_operation == :split
|
35
|
+
id = SecureRandom.hex(8)
|
36
|
+
message = message_text(ip: params[:ip], user: params[:sender], url: params[:url], m: params[:m], s: params[:s], p: params[:p])
|
37
|
+
data = []
|
38
|
+
priority = priority_text
|
39
|
+
header = header_text(params[:request_time])
|
40
|
+
base_msg = priority + header + "#{@tag}[ID=#{id}]:"
|
41
|
+
remaining_byte = 1023 - base_msg.bytesize
|
42
|
+
message_chunks = get_binary_chunks(message, remaining_byte)
|
43
|
+
message_chunks.each {|chunk_data| data << base_msg + chunk_data + ";"}
|
44
|
+
else
|
45
|
+
data[0] = get_binary_chunks(data[0], 1021)[0] + "..."
|
46
|
+
end
|
47
|
+
end
|
48
|
+
data
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def get_binary_chunks(string, size)
|
54
|
+
Array.new(((string.length + size - 1) / size)) {|i| string.byteslice(i * size, size)}
|
55
|
+
end
|
56
|
+
|
57
|
+
# def override_log_formatter
|
58
|
+
# OhMyLog::Log.configuration.log_instance.formatter = proc do |severity, datetime, progname, msg|
|
59
|
+
# "#{msg}\n"
|
60
|
+
# end
|
61
|
+
# end
|
62
|
+
|
63
|
+
def retrive_public_ip
|
64
|
+
Net::HTTP.get(URI("http://checkip.amazonaws.com")).gsub("\n", "") rescue nil
|
65
|
+
end
|
66
|
+
|
67
|
+
def retrive_hostname
|
68
|
+
Socket.gethostname rescue nil
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module SyslogProcessors
|
2
|
+
module RFC3164
|
3
|
+
def calculate_priority
|
4
|
+
self.class.calculate_priority(facility: @facility, severity: @severity)
|
5
|
+
end
|
6
|
+
|
7
|
+
def priority_text
|
8
|
+
return "<#{@priority || calculate_priority}>"
|
9
|
+
end
|
10
|
+
|
11
|
+
def message_text(ip:, user:, url:, m:, s:, p:)
|
12
|
+
text = "#{@tag.upcase}:"
|
13
|
+
text += "ip=#{ip};"
|
14
|
+
text += "u=#{user};"
|
15
|
+
text += "url=#{url};"
|
16
|
+
text += "m=#{m};"
|
17
|
+
text += "s=#{s};"
|
18
|
+
text += "p=#{p};"
|
19
|
+
text
|
20
|
+
end
|
21
|
+
|
22
|
+
def header_text(request_time)
|
23
|
+
#request_time.to_time. + " #{@hostname}"
|
24
|
+
request_time.strftime("%b %-d %H:%M:%S") + " #{@public_ip || @hostname || "FAK"}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def print(params)
|
28
|
+
priority_text + header_text(params[:request_time]) + " " + message_text(params.reject {|k| k == :request_time})
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.calculate_priority(facility: nil, severity: nil)
|
32
|
+
raise "You need facility and severity to calculate the priority" unless facility && severity
|
33
|
+
facility * 8 + severity
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/oh_my_log/version.rb
CHANGED
data/lib/oh_my_log.rb
CHANGED
@@ -1,26 +1,28 @@
|
|
1
|
-
require 'rails
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
end
|
6
|
-
|
1
|
+
require 'rails'
|
2
|
+
OHMYLOG_ORM rescue OHMYLOG_ORM = :active_record
|
3
|
+
#creare una classe depency loader e usare il preload e l'after load
|
4
|
+
require_relative "oh_my_log/orm/#{OHMYLOG_ORM.to_s}"
|
7
5
|
#load the gem's lib folder
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
sources = ["oh_my_log/syslog_processors/", "oh_my_log/"]
|
7
|
+
sources.each do |base_path|
|
8
|
+
Dir[File.dirname(__FILE__) + "/#{base_path}*.rb"].each do |file|
|
9
|
+
name = File.basename(file, File.extname(file))
|
10
|
+
next if (["mongoid_observer", "active_record_observer"]).include? name
|
11
|
+
require_relative base_path + name
|
12
|
+
end
|
13
13
|
end
|
14
14
|
|
15
|
+
|
15
16
|
module OhMyLog
|
16
17
|
#call this after you configured the Log Module
|
17
18
|
def self.start
|
19
|
+
return unless File.directory?(Rails.root + "app/models/observers/oh_my_log")
|
18
20
|
activate
|
19
21
|
#the main loop to get callbacks from controllers
|
20
22
|
ActiveSupport::Notifications.subscribe "process_action.action_controller" do |*args|
|
21
23
|
data = args[-1]
|
22
24
|
if Log::loggable?(data[:params], data[:status], data[:method])
|
23
|
-
request = Log::Request.new(sender: Thread.current[:user], date: Time.now.utc, params: data[:params], method: data[:method], status: data[:status])
|
25
|
+
request = Log::Request.new(sender: Thread.current[:user], date: Time.now.utc, params: data[:params], method: data[:method], status: data[:status], path: data[:path])
|
24
26
|
result = Log::Result.new(request)
|
25
27
|
result.record!
|
26
28
|
end
|
@@ -29,12 +31,7 @@ module OhMyLog
|
|
29
31
|
end
|
30
32
|
|
31
33
|
def self.activate
|
32
|
-
if defined?(Mongoid)
|
33
|
-
require 'mongoid-observers'
|
34
|
-
require_relative "oh_my_log/mongoid_observer"
|
35
|
-
end
|
36
34
|
begin
|
37
|
-
require Rails.root + "config/initializers/oh_my_log_initializer.rb"
|
38
35
|
::OhMyLog::ObserverFactory.activate_observers
|
39
36
|
rescue
|
40
37
|
return "could not start the gem, did you run oh_my_log:install ?"
|
@@ -52,8 +49,11 @@ module OhMyLog
|
|
52
49
|
p "Successfully destroyed the initializer!"
|
53
50
|
end
|
54
51
|
|
52
|
+
def self.test_message(msg)
|
53
|
+
OhMyLog::Log.configuration.log_instance.info(msg)
|
54
|
+
end
|
55
|
+
|
55
56
|
end
|
56
57
|
|
57
58
|
#load the script to inject code to rails source and create rake task
|
58
|
-
require_relative "railtie"
|
59
|
-
|
59
|
+
require_relative "railtie"
|
data/lib/tasks/oh_my_log.rake
CHANGED
@@ -15,6 +15,12 @@ namespace :oh_my_log do
|
|
15
15
|
OhMyLog.generate_initializer
|
16
16
|
end
|
17
17
|
|
18
|
+
desc 'Write a test message int the logger'
|
19
|
+
# in futuro puoi passare direttamente qui alcune impostazioni dell' initialize
|
20
|
+
task test: :environment do
|
21
|
+
OhMyLog.test_message(ENV.fetch('MSG', 'Hello World!'))
|
22
|
+
end
|
23
|
+
|
18
24
|
desc 'Install the gem by building initializer and observers'
|
19
25
|
task install: :environment do
|
20
26
|
Rake::Task['oh_my_log:generate_initializer'].invoke
|
data/oh_my_log.gemspec
CHANGED
@@ -23,12 +23,14 @@ Gem::Specification.new do |s|
|
|
23
23
|
else
|
24
24
|
s.add_runtime_dependency 'railties', '>= 4.2.0', '< 6.0'
|
25
25
|
end
|
26
|
-
s.add_runtime_dependency
|
26
|
+
s.add_runtime_dependency 'sqlite3', '~> 1.3.0'
|
27
|
+
s.add_runtime_dependency "rails-observers", "~> 0.1.5"
|
28
|
+
s.add_runtime_dependency 'mongoid', ">= 3.0"
|
29
|
+
s.add_runtime_dependency "mongoid-observers"
|
27
30
|
s.add_development_dependency 'coveralls'
|
28
31
|
s.add_development_dependency 'rubocop', '~> 0.59.2'
|
29
32
|
s.add_development_dependency 'bundler'
|
30
33
|
s.add_development_dependency 'appraisal'
|
31
|
-
s.add_development_dependency 'sqlite3', '~> 1.3.10'
|
32
34
|
s.add_development_dependency 'wwtd'
|
33
35
|
s.add_development_dependency 'rspec-rails'
|
34
36
|
end
|
@@ -17,6 +17,9 @@ RSpec.describe FoosController, type: :controller do
|
|
17
17
|
config.print_log = true
|
18
18
|
selector = oml::Selector.universal_for(actions: {"EXCEPT" => ["index"]})
|
19
19
|
config.add_selector(selector)
|
20
|
+
OhMyLog::SyslogConfiguration.use("RFC3164")
|
21
|
+
syslog = OhMyLog::SyslogImplementor.new(hostname: "Staging", priority: 101, tag: "BRAINT", program_name: "audit", syslog_facility: "Syslog::LOG_LOCAL3")
|
22
|
+
config.syslog = syslog
|
20
23
|
end
|
21
24
|
end
|
22
25
|
|
@@ -60,6 +63,22 @@ RSpec.describe FoosController, type: :controller do
|
|
60
63
|
put :create, params: {name: 'foo name'}
|
61
64
|
expect(oml.last_recorded).to eq(nil)
|
62
65
|
end
|
66
|
+
it "Should not log a get action if it's blacklisted" do
|
67
|
+
selector = OhMyLog::Log::Selector.new
|
68
|
+
selector.set_methods("EXCEPT" => ["GET"])
|
69
|
+
oml.configuration.reset_selectors
|
70
|
+
oml.configuration.add_selector(selector)
|
71
|
+
get :index
|
72
|
+
expect(oml.last_recorded).to eq(nil)
|
73
|
+
end
|
74
|
+
it "Should log a get action if it's whitelisted" do
|
75
|
+
selector = OhMyLog::Log::Selector.new
|
76
|
+
selector.set_methods("ONLY" => ["GET"])
|
77
|
+
oml.configuration.reset_selectors
|
78
|
+
oml.configuration.add_selector(selector)
|
79
|
+
get :index
|
80
|
+
expect(oml.last_recorded).not_to eq(nil)
|
81
|
+
end
|
63
82
|
it "Should be able to correctly use multiple selector" do
|
64
83
|
selector = OhMyLog::Log::Selector.new
|
65
84
|
selector.set_controllers({"EXCEPT" => ["Foo"]})
|
@@ -81,6 +100,9 @@ RSpec.describe FoosController, type: :controller do
|
|
81
100
|
config.print_log = true
|
82
101
|
selector = oml::Selector.universal_for(actions: {"EXCEPT" => ["index"]})
|
83
102
|
config.add_selector(selector)
|
103
|
+
OhMyLog::SyslogConfiguration.use("RFC3164")
|
104
|
+
syslog = OhMyLog::SyslogImplementor.new(hostname: "Staging", priority: 101, tag: "BRAINT", program_name: "audit", syslog_facility: "Syslog::LOG_LOCAL3")
|
105
|
+
config.syslog = syslog
|
84
106
|
end
|
85
107
|
end
|
86
108
|
it "Should create a log in the path specified in teh configuration" do
|
@@ -99,6 +121,15 @@ RSpec.describe FoosController, type: :controller do
|
|
99
121
|
expect(oml.last_recorded).not_to eq(nil)
|
100
122
|
end
|
101
123
|
|
124
|
+
it "Should split the message bigger than 1024 char when using a syslog" do
|
125
|
+
if Rails::VERSION::MAJOR >= 5
|
126
|
+
put :update, params: {name: "dummy name" * 200, value: 1, id: @dummy.id}
|
127
|
+
else
|
128
|
+
put :update, {name: "dummy name" * 200, value: 1, id: @dummy.id}
|
129
|
+
end
|
130
|
+
expect(oml.last_recorded).not_to eq(nil)
|
131
|
+
end
|
132
|
+
|
102
133
|
it "The log created should have a receiver if the action made any changes to the model" do
|
103
134
|
if Rails::VERSION::MAJOR >= 5
|
104
135
|
put :update, params: {name: "not dummy name", value: 99, id: @dummy.id}
|
@@ -1,3 +1,10 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
if OHMYLOG_ORM == :active_record
|
3
|
+
class ApplicationRecord < ActiveRecord::Base
|
4
|
+
self.abstract_class = true
|
5
|
+
end
|
6
|
+
else
|
7
|
+
class ApplicationRecord
|
8
|
+
include Mongoid::Document
|
9
|
+
end
|
10
|
+
end
|
@@ -4,6 +4,7 @@ require 'oh_my_log'
|
|
4
4
|
|
5
5
|
if defined?(Bundler)
|
6
6
|
Bundler.require(*Rails.groups(assets: %w[development test]))
|
7
|
+
require "#{OHMYLOG_ORM}/railtie"
|
7
8
|
end
|
8
9
|
|
9
10
|
module RailsApp
|
@@ -12,9 +13,9 @@ module RailsApp
|
|
12
13
|
|
13
14
|
config.filter_parameters += [:password]
|
14
15
|
|
15
|
-
config.
|
16
|
+
config.autoload_paths += ["#{config.root}/app/#{OHMYLOG_ORM}"]
|
17
|
+
config.autoload_paths += ["#{config.root}/lib"]
|
16
18
|
|
17
|
-
config.assets.version = '1.0'
|
18
19
|
config.secret_key_base = 'fuuuuuuuuuuu'
|
19
20
|
end
|
20
21
|
end
|
@@ -6,32 +6,31 @@ RailsApp::Application.configure do
|
|
6
6
|
|
7
7
|
if Rails.version > '5'
|
8
8
|
config.public_file_server.enabled = true
|
9
|
-
config.public_file_server.headers = {
|
9
|
+
config.public_file_server.headers = {'Cache-Control' => 'public, max-age=3600'}
|
10
10
|
else
|
11
11
|
config.serve_static_files = true
|
12
12
|
config.static_cache_control = 'public, max-age=3600'
|
13
13
|
end
|
14
14
|
|
15
|
-
config.consider_all_requests_local
|
15
|
+
config.consider_all_requests_local = true
|
16
16
|
config.action_controller.perform_caching = false
|
17
17
|
|
18
18
|
config.action_dispatch.show_exceptions = false
|
19
19
|
|
20
20
|
config.action_controller.allow_forgery_protection = false
|
21
21
|
|
22
|
-
config.action_mailer.delivery_method = :test
|
23
|
-
config.action_mailer.default_url_options = { host: 'test.host' }
|
24
|
-
|
25
22
|
config.active_support.deprecation = :stderr
|
26
23
|
I18n.enforce_available_locales = false
|
27
24
|
|
28
25
|
config.active_support.test_order = :sorted
|
29
26
|
config.log_level = :debug
|
30
|
-
if
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
27
|
+
if (OHMYLOG_ORM == "active_record")
|
28
|
+
if Rails.gem_version >= Gem::Version.new('4.2') && Rails.gem_version.release < Gem::Version.new('5.0')
|
29
|
+
config.active_record.raise_in_transactional_callbacks = true
|
30
|
+
end
|
31
|
+
if Rails.gem_version.release >= Gem::Version.new('5.2') && Rails.gem_version.release < Gem::Version.new('6.0')
|
32
|
+
config.active_record.sqlite3.represent_boolean_as_integer = true
|
33
|
+
end
|
35
34
|
end
|
36
35
|
end
|
37
|
-
ActiveSupport::Deprecation.debug = true
|
36
|
+
ActiveSupport::Deprecation.debug = true
|
@@ -1,8 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
require "oh_my_log/orm/#{OHMYLOG_ORM}"
|
4
|
+
|
5
|
+
if OHMYLOG_ORM == :active_record
|
6
|
+
MIGRATION_CLASS =
|
7
|
+
if Rails.gem_version >= Gem::Version.new('5.0')
|
8
|
+
ActiveRecord::Migration[Rails.version.to_f]
|
9
|
+
else
|
10
|
+
ActiveRecord::Migration
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'active_record'
|
3
|
+
|
4
|
+
ActiveRecord::Migration.verbose = false
|
5
|
+
ActiveRecord::Base.logger = Logger.new(nil)
|
6
|
+
if Rails.gem_version >= Gem::Version.new('5.2.0')
|
7
|
+
ActiveRecord::MigrationContext.new(File.expand_path('../../dummy/db/migrate', __FILE__)).migrate
|
8
|
+
else
|
9
|
+
ActiveRecord::Migrator.migrate(File.expand_path('../../dummy/db/migrate', __FILE__))
|
10
|
+
end
|
11
|
+
|
12
|
+
ORMInvalidRecordException = ActiveRecord::RecordInvalid
|
data/spec/orm/mongoid.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mongoid/version'
|
4
|
+
require 'mongoid'
|
5
|
+
Mongoid.configure do |config|
|
6
|
+
config.load!('spec/support/mongoid.yml', Rails.env)
|
7
|
+
config.use_utc = true
|
8
|
+
config.include_root_in_json = true
|
9
|
+
end
|
10
|
+
|
11
|
+
ORMInvalidRecordException = Mongoid::Errors::Validations
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
ENV['RAILS_ENV'] ||= 'test'
|
2
|
+
OHMYLOG_ORM = ENV.fetch('OHMYLOG_ORM', 'active_record').to_sym
|
2
3
|
require 'simplecov'
|
3
4
|
SimpleCov.start do
|
4
5
|
add_filter 'gemfiles'
|
5
6
|
add_filter 'lib/railtie.rb'
|
6
7
|
add_filter 'lib/tasks/oh_my_log.rake'
|
8
|
+
add_filter 'lib/oh_my_log/orm'
|
9
|
+
add_filter 'lib/oh_my_log/syslog_processors'
|
7
10
|
add_filter 'spec'
|
8
11
|
add_filter 'blue_print'
|
9
12
|
add_group 'Tests', 'test'
|
@@ -15,7 +18,9 @@ if ENV['CI']
|
|
15
18
|
Coveralls.wear!
|
16
19
|
end
|
17
20
|
require 'active_support/all'
|
21
|
+
require 'rails'
|
18
22
|
require 'dummy/config/environment'
|
23
|
+
require_relative "../spec/orm/#{OHMYLOG_ORM}"
|
19
24
|
# note that require 'rspec-rails' does not work
|
20
25
|
# https://stackoverflow.com/questions/14458122/framework-integration-testing-within-a-gem-how-to-set-up-rspec-controller-test
|
21
26
|
require 'rspec/rails'
|
@@ -24,13 +29,4 @@ require 'rake'
|
|
24
29
|
|
25
30
|
load File.expand_path("../../lib/tasks/oh_my_log.rake", __FILE__)
|
26
31
|
# make sure you set correct relative path
|
27
|
-
Rake::Task.define_task(:environment)
|
28
|
-
|
29
|
-
ActiveRecord::Migration.verbose = false
|
30
|
-
ActiveRecord::Base.logger = Logger.new(nil)
|
31
|
-
|
32
|
-
if Rails.gem_version >= Gem::Version.new('5.2.0')
|
33
|
-
ActiveRecord::MigrationContext.new(File.expand_path('../dummy/db/migrate', __FILE__)).migrate
|
34
|
-
else
|
35
|
-
ActiveRecord::Migrator.migrate(File.expand_path('../dummy/db/migrate', __FILE__))
|
36
|
-
end
|
32
|
+
Rake::Task.define_task(:environment)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oh_my_log
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fabrizio Spadaro
|
@@ -30,6 +30,20 @@ dependencies:
|
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '6.0'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: sqlite3
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 1.3.0
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 1.3.0
|
33
47
|
- !ruby/object:Gem::Dependency
|
34
48
|
name: rails-observers
|
35
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,6 +58,34 @@ dependencies:
|
|
44
58
|
- - "~>"
|
45
59
|
- !ruby/object:Gem::Version
|
46
60
|
version: 0.1.5
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: mongoid
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '3.0'
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '3.0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: mongoid-observers
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
type: :runtime
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
47
89
|
- !ruby/object:Gem::Dependency
|
48
90
|
name: coveralls
|
49
91
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,20 +142,6 @@ dependencies:
|
|
100
142
|
- - ">="
|
101
143
|
- !ruby/object:Gem::Version
|
102
144
|
version: '0'
|
103
|
-
- !ruby/object:Gem::Dependency
|
104
|
-
name: sqlite3
|
105
|
-
requirement: !ruby/object:Gem::Requirement
|
106
|
-
requirements:
|
107
|
-
- - "~>"
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: 1.3.10
|
110
|
-
type: :development
|
111
|
-
prerelease: false
|
112
|
-
version_requirements: !ruby/object:Gem::Requirement
|
113
|
-
requirements:
|
114
|
-
- - "~>"
|
115
|
-
- !ruby/object:Gem::Version
|
116
|
-
version: 1.3.10
|
117
145
|
- !ruby/object:Gem::Dependency
|
118
146
|
name: wwtd
|
119
147
|
requirement: !ruby/object:Gem::Requirement
|
@@ -172,9 +200,14 @@ files:
|
|
172
200
|
- lib/oh_my_log/log.rb
|
173
201
|
- lib/oh_my_log/mongoid_observer.rb
|
174
202
|
- lib/oh_my_log/observer_factory.rb
|
203
|
+
- lib/oh_my_log/orm/active_record.rb
|
204
|
+
- lib/oh_my_log/orm/mongoid.rb
|
175
205
|
- lib/oh_my_log/request.rb
|
176
206
|
- lib/oh_my_log/result.rb
|
177
207
|
- lib/oh_my_log/selector.rb
|
208
|
+
- lib/oh_my_log/syslog_configuration.rb
|
209
|
+
- lib/oh_my_log/syslog_implementor.rb
|
210
|
+
- lib/oh_my_log/syslog_processors/r_f_c_3164.rb
|
178
211
|
- lib/oh_my_log/version.rb
|
179
212
|
- lib/railtie.rb
|
180
213
|
- lib/tasks/oh_my_log.rake
|
@@ -198,11 +231,15 @@ files:
|
|
198
231
|
- spec/dummy/config/environment.rb
|
199
232
|
- spec/dummy/config/environments/test.rb
|
200
233
|
- spec/dummy/config/initializers/migration_class.rb
|
234
|
+
- spec/dummy/config/mongoid.yml
|
201
235
|
- spec/dummy/config/routes.rb
|
202
236
|
- spec/dummy/config/secrets.yml
|
203
237
|
- spec/dummy/db/migrate/20120508165529_create_tables.rb
|
238
|
+
- spec/orm/active_record.rb
|
239
|
+
- spec/orm/mongoid.rb
|
204
240
|
- spec/rails_helper.rb
|
205
241
|
- spec/spec_helper.rb
|
242
|
+
- spec/support/mongoid.yml
|
206
243
|
homepage: https://github.com/fabriziospadaro/oh_my_log
|
207
244
|
licenses:
|
208
245
|
- MIT
|