smart_logger_wrapper 0.3.1 → 0.4.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 +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: []
|