smart_logger_wrapper 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +45 -2
- data/lib/smart_logger_wrapper/options/append_backtrace.rb +4 -4
- data/lib/smart_logger_wrapper/options/base.rb +1 -1
- data/lib/smart_logger_wrapper/options/to.rb +6 -4
- data/lib/smart_logger_wrapper/options/with_position.rb +4 -4
- data/lib/smart_logger_wrapper/options.rb +3 -3
- data/lib/smart_logger_wrapper/version.rb +1 -1
- data/lib/smart_logger_wrapper.rb +3 -3
- data/smart_logger_wrapper.gemspec +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f821646a21a7ca5704bedff4b51aad0655417dfa
|
4
|
+
data.tar.gz: 2dea06157c0c52b008fe3e991b3c6d10947ac99a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cddf0ac43265639c9ef533974225c874dd3ef97f94aff290c0711579ee912670fb1c59164bef8374c62faf9d4aaf29009ba6d63a10be48aa01317e26c0d2152f
|
7
|
+
data.tar.gz: c1e9928de163ef319c761c51be91aa601f0ee810e4e2349101fafe740615b37df4fcec8f09faebbf9fdac37fdcd151413ddbf1ccdd75ad3b43242805a48124ba
|
data/README.md
CHANGED
@@ -31,12 +31,12 @@ Wrap your logger with `SmartLoggerWrapper`, for example, in `config/environments
|
|
31
31
|
|
32
32
|
Note that it is strongly recommended to use the wrapper for all kind of environments so that you can avoid exceptions such as `NoMethodError` due to the unique features of this library.
|
33
33
|
|
34
|
-
You may want to put log messages to `
|
34
|
+
You may want to put log messages to `STDERR` in your development environment. Then:
|
35
35
|
|
36
36
|
```ruby
|
37
37
|
config.logger = SmartLoggerWrapper.new(
|
38
38
|
SmartLoggerWrapper.new(Logger.new("log/development.log")).with_position,
|
39
|
-
ActiveSupport::Logger.new(
|
39
|
+
ActiveSupport::Logger.new(STDERR)
|
40
40
|
)
|
41
41
|
```
|
42
42
|
|
@@ -130,6 +130,49 @@ logger.append_backtrace.info 'A message'
|
|
130
130
|
logger.append_backtrace(2).info 'A message'
|
131
131
|
```
|
132
132
|
|
133
|
+
### Define your own options
|
134
|
+
|
135
|
+
You can define a new option by your own.
|
136
|
+
|
137
|
+
For instance, in the case you want to integrate a messenger, such as Slack, in a Rails app, you will define an initializer like this:
|
138
|
+
|
139
|
+
`config/initializers/some_messenger_integration.rb`
|
140
|
+
|
141
|
+
```ruby
|
142
|
+
SmartLoggerWrapper::Options.define_redirector :to_messenger, Class.new(SmartLoggerWrapper::Options::Base) do
|
143
|
+
def apply!(messages, argument, severity, wrapper)
|
144
|
+
channel = argument || 'general'
|
145
|
+
formatter = wrapper.formatter
|
146
|
+
formatted_messages = messages.map { |message| formatter.call(severity, time, nil, message) }
|
147
|
+
Thread.new do
|
148
|
+
SomeMessenger.new(channel: channel).post(['```', *formatted_messages, '```'].join("\n"))
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
```
|
153
|
+
|
154
|
+
Then, you can post log messages as follows:
|
155
|
+
|
156
|
+
```ruby
|
157
|
+
Rails.logger.to_messenger('channel').error('foo')
|
158
|
+
```
|
159
|
+
|
160
|
+
There are three categories for `SmartLoggerWrapper::Options`. Each option will be applied in the following order according to its category:
|
161
|
+
|
162
|
+
#### 1. Tagger
|
163
|
+
|
164
|
+
A tagger is expected to be used to tag each message. To define a tagger, you will call `SmartLoggerWrapper::Options.define_tagger`.
|
165
|
+
|
166
|
+
#### 2. Appender
|
167
|
+
|
168
|
+
An appender is expected to append some additinal information to the message list. To define an appender, you will call `SmartLoggerWrapper::Options.define_appender`.
|
169
|
+
|
170
|
+
#### 3. Redirector
|
171
|
+
|
172
|
+
A redirector should put messages to another location from the one where the wrapped logger specifies. To define a redirector, you will call `SmartLoggerWrapper::Options.define_redirector`.
|
173
|
+
|
174
|
+
Indeed, these categories don't restrict how you implement your options. You can, for example, tag messages with a redirector in your responsibility.
|
175
|
+
|
133
176
|
## Contributing
|
134
177
|
|
135
178
|
Bug reports and pull requests are welcome on GitHub at https://github.com/akeyhero/smart_logger_wrapper.
|
@@ -7,15 +7,15 @@ class SmartLoggerWrapper < Logger
|
|
7
7
|
class AppendBacktrace < Base
|
8
8
|
include ::SmartLoggerWrapper::Utils::Backtrace
|
9
9
|
|
10
|
-
def apply!(messages,
|
11
|
-
length =
|
10
|
+
def apply!(messages, argument, severity, wrapper)
|
11
|
+
length = argument.is_a?(Numeric) ? argument : nil
|
12
12
|
messages << [
|
13
13
|
'BACKTRACE:',
|
14
|
-
*get_backtrace(
|
14
|
+
*get_backtrace(wrapper.offset + APPLY_CALLER_STACK_DEPTH + 1, length)
|
15
15
|
].join("\n")
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
define_appender :append_backtrace, AppendBacktrace
|
19
|
+
define_appender :append_backtrace, AppendBacktrace
|
20
20
|
end
|
21
21
|
end
|
@@ -4,14 +4,16 @@ require 'smart_logger_wrapper/options/base'
|
|
4
4
|
class SmartLoggerWrapper < Logger
|
5
5
|
module Options
|
6
6
|
class To < Base
|
7
|
-
def apply!(messages,
|
8
|
-
raise ApplicationError, 'No handler given' if
|
9
|
-
|
7
|
+
def apply!(messages, argument, severity, wrapper)
|
8
|
+
raise ApplicationError, 'No handler given' if argument == nil
|
9
|
+
time = Time.now
|
10
|
+
formatter = wrapper.formatter
|
11
|
+
argument.puts messages.map { |message| formatter.call(severity, time, nil, message) }.join("\n")
|
10
12
|
rescue NoMethodError => e
|
11
13
|
raise ApplicationError, e.message
|
12
14
|
end
|
13
15
|
end
|
14
16
|
|
15
|
-
define_redirector :to, To
|
17
|
+
define_redirector :to, To
|
16
18
|
end
|
17
19
|
end
|
@@ -7,10 +7,10 @@ class SmartLoggerWrapper < Logger
|
|
7
7
|
class WithPosition < Base
|
8
8
|
include ::SmartLoggerWrapper::Utils::Path
|
9
9
|
|
10
|
-
def apply!(messages,
|
11
|
-
return if
|
10
|
+
def apply!(messages, argument, severity, wrapper)
|
11
|
+
return if argument == false
|
12
12
|
# add 1 to `start` because this method dug the backtrace by 1
|
13
|
-
location = caller_locations(
|
13
|
+
location = caller_locations(wrapper.offset + APPLY_CALLER_STACK_DEPTH + 1, 1)
|
14
14
|
prefix =
|
15
15
|
if location && location.length > 0
|
16
16
|
method_name = location[0].label
|
@@ -24,6 +24,6 @@ class SmartLoggerWrapper < Logger
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
define_tagger :with_position, WithPosition
|
27
|
+
define_tagger :with_position, WithPosition
|
28
28
|
end
|
29
29
|
end
|
@@ -9,10 +9,10 @@ class SmartLoggerWrapper < Logger
|
|
9
9
|
|
10
10
|
module_function
|
11
11
|
|
12
|
-
def apply_all!(messages, logger)
|
12
|
+
def apply_all!(messages, severity, logger)
|
13
13
|
[defined_appenders, defined_taggers, defined_redirectors].flatten.each do |option_key|
|
14
14
|
if logger.options.include?(option_key)
|
15
|
-
defined_options[option_key].apply!(messages, logger.options[option_key], logger)
|
15
|
+
defined_options[option_key].apply!(messages, logger.options[option_key], severity, logger)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -20,7 +20,7 @@ class SmartLoggerWrapper < Logger
|
|
20
20
|
def define_option(option_name, option_object, defined_option_keys)
|
21
21
|
key = option_name.to_sym
|
22
22
|
defined_option_keys.push(key)
|
23
|
-
defined_options.merge!(key => option_object)
|
23
|
+
defined_options.merge!(key => option_object.new)
|
24
24
|
end
|
25
25
|
|
26
26
|
def define_appender(option_name, option_object)
|
data/lib/smart_logger_wrapper.rb
CHANGED
@@ -31,7 +31,7 @@ class SmartLoggerWrapper < Logger
|
|
31
31
|
# The return value is the first one of the first logger's.
|
32
32
|
SEVERITY_MAPPING.each do |severity_name, severity|
|
33
33
|
define_method(severity_name) do |*args, &block|
|
34
|
-
format_messages(*args, &block).map do |message|
|
34
|
+
format_messages(severity, *args, &block).map do |message|
|
35
35
|
loggers.map do |logger|
|
36
36
|
logger.public_send(severity_name, message)
|
37
37
|
end.first
|
@@ -61,11 +61,11 @@ class SmartLoggerWrapper < Logger
|
|
61
61
|
|
62
62
|
private
|
63
63
|
|
64
|
-
def format_messages(*args, &block)
|
64
|
+
def format_messages(severity, *args, &block)
|
65
65
|
messages = args.map { |arg| to_message(arg) }
|
66
66
|
messages << to_message(block.call) if block_given?
|
67
67
|
begin
|
68
|
-
Options.apply_all!(messages, self)
|
68
|
+
Options.apply_all!(messages, severity, self)
|
69
69
|
rescue Options::ApplicationError => e
|
70
70
|
loggers.each do |logger|
|
71
71
|
logger.error(<<~EOM)
|
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Akihiro Katsura"]
|
10
10
|
spec.email = ["info@kats.la"]
|
11
11
|
|
12
|
-
spec.summary = %q{SmartLoggerWrapper adds some useful features to the Ruby Logger or
|
13
|
-
# spec.description = %q{SmartLoggerWrapper adds some useful features to the Ruby Logger or
|
12
|
+
spec.summary = %q{SmartLoggerWrapper adds some useful features to the Ruby Logger or a subclass.}
|
13
|
+
# spec.description = %q{SmartLoggerWrapper adds some useful features to the Ruby Logger or a subclass.}
|
14
14
|
spec.homepage = "https://github.com/akeyhero/smart_logger_wrapper"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smart_logger_wrapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Akihiro Katsura
|
@@ -101,5 +101,5 @@ rubyforge_project:
|
|
101
101
|
rubygems_version: 2.6.8
|
102
102
|
signing_key:
|
103
103
|
specification_version: 4
|
104
|
-
summary: SmartLoggerWrapper adds some useful features to the Ruby Logger or
|
104
|
+
summary: SmartLoggerWrapper adds some useful features to the Ruby Logger or a subclass.
|
105
105
|
test_files: []
|