ruby_smart-simple_logger 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ruby.yml +38 -0
  3. data/.gitignore +25 -0
  4. data/.rspec +3 -0
  5. data/.yardopts +5 -0
  6. data/Gemfile +7 -0
  7. data/README.md +739 -0
  8. data/Rakefile +8 -0
  9. data/bin/console +8 -0
  10. data/bin/setup +8 -0
  11. data/docs/CHANGELOG.md +17 -0
  12. data/docs/CODE_OF_CONDUCT.md +84 -0
  13. data/docs/LICENSE.txt +21 -0
  14. data/lib/debugger.rb +20 -0
  15. data/lib/ruby_smart/simple_logger/core_ext/ruby/string.rb +43 -0
  16. data/lib/ruby_smart/simple_logger/devices/memory_device.rb +43 -0
  17. data/lib/ruby_smart/simple_logger/devices/multi_device.rb +69 -0
  18. data/lib/ruby_smart/simple_logger/devices/proc_device.rb +37 -0
  19. data/lib/ruby_smart/simple_logger/extensions/helper.rb +259 -0
  20. data/lib/ruby_smart/simple_logger/extensions/logs.rb +26 -0
  21. data/lib/ruby_smart/simple_logger/extensions/mask.rb +53 -0
  22. data/lib/ruby_smart/simple_logger/extensions/scene.rb +77 -0
  23. data/lib/ruby_smart/simple_logger/extensions/severity.rb +62 -0
  24. data/lib/ruby_smart/simple_logger/extensions/simple_log.rb +224 -0
  25. data/lib/ruby_smart/simple_logger/extensions/timer.rb +63 -0
  26. data/lib/ruby_smart/simple_logger/formatter.rb +153 -0
  27. data/lib/ruby_smart/simple_logger/gem_version.rb +23 -0
  28. data/lib/ruby_smart/simple_logger/klass_logger.rb +45 -0
  29. data/lib/ruby_smart/simple_logger/logger.rb +74 -0
  30. data/lib/ruby_smart/simple_logger/scenes.rb +288 -0
  31. data/lib/ruby_smart/simple_logger/version.rb +12 -0
  32. data/lib/ruby_smart/simple_logger.rb +25 -0
  33. data/lib/ruby_smart-simple_logger.rb +3 -0
  34. data/lib/simple_logger.rb +7 -0
  35. data/ruby_smart-simple_logger.gemspec +43 -0
  36. metadata +167 -0
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'extensions/helper'
4
+ require_relative 'extensions/logs'
5
+ require_relative 'extensions/mask'
6
+ require_relative 'extensions/scene'
7
+ require_relative 'extensions/severity'
8
+ require_relative 'extensions/simple_log'
9
+ require_relative 'extensions/timer'
10
+
11
+ require_relative 'devices/memory_device'
12
+ require_relative 'devices/multi_device'
13
+ require_relative 'devices/proc_device'
14
+
15
+ require_relative 'formatter'
16
+ require_relative 'scenes'
17
+
18
+ # requires ruby's logger
19
+ require 'logger'
20
+ require 'gem_info'
21
+
22
+ module RubySmart
23
+ module SimpleLogger
24
+ class Logger < ::Logger
25
+ include Extensions::Helper
26
+ include Extensions::Logs
27
+ include Extensions::Mask
28
+ include Extensions::Scene
29
+ include Extensions::Severity
30
+ include Extensions::SimpleLog
31
+ include Extensions::Timer
32
+
33
+ include Scenes
34
+
35
+ # enable access to the logdev
36
+ attr_reader :logdev
37
+
38
+ # defines a uniq key to parse the data
39
+ PAYLOAD_DATA_KEY = :_data
40
+
41
+ # initialize new Logger
42
+ # @param [Object, Symbol, nil] builtin
43
+ # @param [Hash] opts
44
+ # @option opts [Symbol] :format - defines a custom format
45
+ def initialize(builtin = nil, opts = nil)
46
+ # check if only a hash was provided
47
+ if opts.nil? && builtin.is_a?(Hash)
48
+ opts = builtin
49
+ else
50
+ opts ||= {}
51
+
52
+ # extend builtin option if not set
53
+ opts[:builtin] = builtin unless opts[:builtin]
54
+ end
55
+
56
+ # initialize provided opts
57
+ o = _init_opts(opts)
58
+
59
+ super(
60
+ _logdev(o[:device]),
61
+ o[:shift_age] || 0,
62
+ o[:shift_size] || 1048576,
63
+ **o.slice(:level, :progname, :formatter, :datetime_format, :binmode, :shift_period_suffix)
64
+ )
65
+ end
66
+
67
+ # overwrite level setter, to accept every available (also newly defined) Severity
68
+ # @param [Numeric, String, Symbol] sev - severity to resolve
69
+ def level=(sev)
70
+ @level = _level(sev)
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,288 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubySmart
4
+ module SimpleLogger
5
+ module Scenes
6
+ def self.included(base)
7
+ # debug method
8
+ # log level @ debug
9
+ # prints: prettified data by using the 'inspect' method
10
+ #
11
+ # > ================================================= [Debug] ================================================
12
+ # > "DEBUGGED DATA" <- analyzed by awesome_print#ai method
13
+ # > ==========================================================================================================
14
+ base.scene :debug, { level: :debug, inspect: true, payload: [[:mask, ' [%{subject}] '], :_data, :mask] } do |data, subject = 'Debug', opts = {}|
15
+ self.log data, _scene_opt(:debug, { subject: subject }, opts)
16
+ end
17
+
18
+ # info method (BASE)
19
+ # log level @ info
20
+ # prints: enclosed data
21
+ #
22
+ # > ================================================= [Info] =================================================
23
+ # > DATA
24
+ # > ==========================================================================================================
25
+ base.scene :info, { level: :info, mask: { clr: :cyan }, payload: [[:mask, ' [%{subject}] '], :_data, :mask] } do |data, subject = 'Info', opts = {}|
26
+ self.log data, _scene_opt(:info, { subject: subject }, opts)
27
+ end
28
+
29
+ # warn method (BASE)
30
+ # log level @ warn
31
+ # prints: enclosed data
32
+ #
33
+ # > ================================================= [Warn] =================================================
34
+ # > DATA
35
+ # > ==========================================================================================================
36
+ base.scene :warn, { level: :warn, mask: { clr: :yellow }, payload: [[:mask, ' [%{subject}] '], :_data, :mask] } do |data, subject = 'Warn', opts = {}|
37
+ self.log data, _scene_opt(:warn, { subject: subject }, opts)
38
+ end
39
+
40
+ # error method (BASE)
41
+ # log level @ error
42
+ # prints: enclosed data
43
+ #
44
+ # > ================================================ [Error] =================================================
45
+ # > DATA
46
+ # > ==========================================================================================================
47
+ base.scene :error, { level: :error, mask: { clr: :red }, payload: [[:mask, ' [%{subject}] '], :_data, :mask] } do |data, subject = 'Error', opts = {}|
48
+ self.log data, _scene_opt(:error, { subject: subject }, opts)
49
+ end
50
+
51
+ # fatal method (BASE)
52
+ # log level @ fatal
53
+ # prints: enclosed data
54
+ #
55
+ # > ================================================ [Fatal] =================================================
56
+ # > DATA
57
+ # > ==========================================================================================================
58
+ base.scene :fatal, { level: :fatal, mask: { clr: :bg_red }, payload: [[:mask, ' [%{subject}] '], :_data, :mask] } do |data, subject = 'Fatal', opts = {}|
59
+ self.log data, _scene_opt(:fatal, { subject: subject }, opts)
60
+ end
61
+
62
+ # success method
63
+ # log level @ success (sub-level of info)
64
+ # prints: enclosed data
65
+ #
66
+ # > ================================================ [Success] ================================================
67
+ # > DATA
68
+ # > ===========================================================================================================
69
+ base.scene :success, { level: :success, mask: { clr: :green }, payload: [[:mask, ' [%{subject}] '], :_data, :mask] } do |data, subject = 'Success', opts = {}|
70
+ self.log data, _scene_opt(:success, { subject: subject }, opts)
71
+ end
72
+
73
+ # header method
74
+ # log level @ debug
75
+ # prints: prettified subject
76
+ #
77
+ # > ===========================================================================================================
78
+ # > ================================================ <Subject> ================================================
79
+ # > ===========================================================================================================
80
+ base.scene :header, { level: :debug, payload: [:mask, [:mask, ' <%{subject}> '], :mask] } do |subject, opts = {}|
81
+ # autostart a timer method, if required
82
+ self.timer(:start, :default) if opts[:timer]
83
+
84
+ self.log nil, _scene_opt(:header, { subject: subject }, opts)
85
+ end
86
+
87
+ # footer method
88
+ # log level @ debug
89
+ # prints: prettified subject
90
+ #
91
+ # > ===========================================================================================================
92
+ # > ================================================ >Subject< ================================================
93
+ # > ===========================================================================================================
94
+ base.scene :footer, { level: :debug, payload: [:mask, [:mask, ' >%{subject}< '], :mask] } do |subject, opts = {}|
95
+ self.log nil, _scene_opt(:footer, { subject: subject }, opts)
96
+
97
+ # clears & prints timer
98
+ self.desc("duration: #{self.timer(:clear, :default, :humanized => true)}") if opts[:timer]
99
+ end
100
+
101
+ # topic method
102
+ # log level @ debug
103
+ # prints: prettified subject
104
+ #
105
+ # > --------------------------------------------------------------------------------
106
+ # > #----------------------------------- Subject ----------------------------------#
107
+ # > --------------------------------------------------------------------------------
108
+ base.scene :topic, { level: :debug, mask: { char: '-', length: 95, clr: :blueish }, payload: [:mask, [:mask, '%{title}'], :mask] } do |subject, opts = {}|
109
+ opts = _scene_opt(:topic, opts)
110
+ txt = " #{subject} ".center(opts[:mask][:length] - 2, opts[:mask][:char])
111
+ opts[:title] = "##{txt}#"
112
+
113
+ self.log nil, opts
114
+ end
115
+
116
+ # theme method
117
+ # log level @ debug
118
+ # prints: prettified, colored subject
119
+ #
120
+ # > # Subject
121
+ # > ----------------------------------------------------------------------
122
+ base.scene :theme, { level: :debug, clr: :purple, mask: { char: '-', length: 85, clr: :purple }, payload: [[:txt, '# %{subject}'], :mask] } do |subject, opts = {}|
123
+ self.log nil, _scene_opt(:theme, { subject: subject }, opts)
124
+ end
125
+
126
+ # theme_result method
127
+ # log level @ debug
128
+ # prints: prettified, colored result
129
+ #
130
+ # > ----------------------------------------------------------------------
131
+ # > -> Result
132
+ # >
133
+ base.scene :theme_result, { level: :debug, mask: { char: '-', length: 85, clr: :purple }, payload: [:mask, [:txt, '-> %{result}'], ''] } do |result, status = nil, opts = {}|
134
+ res_or_clr = status.nil? ? result : status
135
+ self.log nil, _scene_opt(:theme_result, { result: result, clr: _res_clr(res_or_clr) }, opts)
136
+ end
137
+
138
+ # theme_line method
139
+ # log level @ debug
140
+ # prints: colored line with no text
141
+ #
142
+ # > ----------------------------------------------------------------------
143
+ base.scene :theme_line, { level: :debug, mask: { char: '-', length: 85, clr: :purple }, payload: [:mask] } do |opts = {}|
144
+ self.log nil, _scene_opt(:theme_line, opts)
145
+ end
146
+
147
+ # desc method
148
+ # log level @ debug
149
+ # prints: colored text
150
+ #
151
+ # > "description"
152
+ # >
153
+ base.scene :desc, { level: :debug, clr: :purple, payload: [[:txt, '%{description}']] } do |description, opts = {}|
154
+ self.log nil, _scene_opt(:desc, { description: description.to_s }, opts)
155
+ end
156
+
157
+ # job method
158
+ # log level @ debug
159
+ # prints: colored line with job name (on inline formatter it prevents a line-break)
160
+ # calls the result method if a block was provided
161
+ #
162
+ # > - Job name =>
163
+ # ________________________________________________________________ <- 64 chars
164
+ base.scene :job, { level: :debug, clr: :cyan, nl: false, length: 64, payload: [[:concat, ['- ', [:txt, '%{name}'], ' => ']]] } do |name, opts = {}, &block|
165
+ self.log nil, _scene_opt(:job, { name: name }, opts)
166
+ self.result(*block.call) if block_given?
167
+ end
168
+
169
+ # sub_job method
170
+ # log level @ debug
171
+ # prints: line with job name (on inline formatter it prevents a line-break)
172
+ # calls the result method if a block was provided
173
+ #
174
+ # > * Subjob name =>
175
+ # ______________________________________________________________ <- 62 chars
176
+ base.scene :sub_job, { level: :debug, clr: :cyan, nl: false, length: 62, payload: [[:concat, [' * ', [:txt, '%{name}'], ' => ']]] } do |name, opts = {}, &block|
177
+ self.log nil, _scene_opt(:sub_job, { name: name }, opts)
178
+ self.result(*block.call) if block_given?
179
+ end
180
+
181
+ # result method
182
+ # log level @ debug
183
+ # prints: colored result
184
+ #
185
+ # > Result
186
+ base.scene :result, { level: :debug, payload: [[:txt, '%{result}']] } do |result, status = nil, opts = {}|
187
+ res_or_clr = status.nil? ? result : status
188
+ self.log nil, _scene_opt(:result, { result: result, clr: _res_clr(res_or_clr) }, opts)
189
+ end
190
+
191
+ # job_result method
192
+ # log level @ debug
193
+ # prints: job with combined colored result
194
+ #
195
+ # > - Job name => Result
196
+ base.scene :job_result, { level: :debug } do |name, result, status = nil, opts = {}|
197
+ self.job(name, opts)
198
+ self.result(result, status, opts)
199
+ end
200
+
201
+ # sub_job_result method
202
+ # log level @ debug
203
+ # prints: sub_job with combined colored result
204
+ #
205
+ # > * Subjob name => Result
206
+ base.scene :sub_job_result, { level: :debug } do |name, result, status = nil, opts = {}|
207
+ self.sub_job(name, opts)
208
+ self.result(result, status, opts)
209
+ end
210
+
211
+ # line method
212
+ # log level @ debug
213
+ # prints: just a line with data
214
+ #
215
+ # > DATA
216
+ base.scene :line, { level: :debug } do |data, opts = {}|
217
+ self.log data, _scene_opt(:line, opts)
218
+ end
219
+
220
+ # print method
221
+ # log level @ debug
222
+ # prints: prints data without a newline
223
+ #
224
+ # > DATA
225
+ base.scene :print, { level: :debug, nl: false } do |data, opts = {}|
226
+ self.log data, _scene_opt(:print, opts)
227
+ end
228
+
229
+ # nl method
230
+ # log level @ debug
231
+ # prints: a line break without any data
232
+ #
233
+ # >
234
+ # >
235
+ base.scene :nl, { level: :debug } do |opts = {}|
236
+ self.log '', _scene_opt(:nl, opts)
237
+ end
238
+
239
+ # spec method
240
+ # log level @ debug
241
+ # prints: colored spec result string - depending on the status (on inline formatter it prevents a line-break)
242
+ #
243
+ # true => . (green)
244
+ # false => F (red)
245
+ # "other" => ? (yellow)
246
+ #
247
+ # > .FFF...??...F....F...F..???....F...??
248
+ base.scene :spec, { level: :debug, nl: false, payload: [[:txt, '%{result}']] } do |status, opts = {}|
249
+ result = if status.is_a?(TrueClass)
250
+ '.'
251
+ elsif status.is_a?(FalseClass)
252
+ 'F'
253
+ else
254
+ status = :yellow
255
+ '?'
256
+ end
257
+ self.log nil, _scene_opt(:spec, { result: result, clr: _res_clr(status) }, opts)
258
+ end
259
+
260
+ # progress method
261
+ # log level @ debug
262
+ # prints: a colored progress indicator
263
+ #
264
+ # > - Progress of Step 0 [ 0%] >-------------------------------------------------
265
+ # > - Progress of Step 1 [ 40%] ===================>------------------------------
266
+ # ________________________________________________ <- 48 chars
267
+ # 50 chars -> __________________________________________________
268
+ base.scene :progress, { level: :debug, payload: [[:txt, '- %{name} [%{perc}%] %{progress}']] } do |name, perc, opts = {}|
269
+ pmask_length = 50
270
+
271
+ # convert and fix progress
272
+ perc = perc.to_i
273
+ perc = 0 if perc < 0
274
+ perc = 100 if perc > 100
275
+
276
+ pmask_left_length = (pmask_length * perc / 100)
277
+ # reduce 1 char for the arrow '>'
278
+ pmask_left_length -= 1 if pmask_left_length > 0
279
+ pmask_right_length = pmask_length - pmask_left_length - 1
280
+
281
+ progress_string = _clr(('=' * pmask_left_length) + '>', :green) + _clr('-' * pmask_right_length, :red)
282
+ perc_string = perc.to_s.rjust(3,' ')
283
+ self.log nil, _scene_opt(:progress, { name: _clr(_lgth(name, 48), :cyan), perc: perc_string, progress: progress_string }, opts)
284
+ end
285
+ end
286
+ end
287
+ end
288
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'gem_version'
4
+
5
+ module RubySmart
6
+ module SimpleLogger
7
+ # Returns the version of the currently loaded Gem as a <tt>Gem::Version</tt>
8
+ def self.version
9
+ gem_version
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "gem_info"
4
+
5
+ require_relative "simple_logger/core_ext/ruby/string"
6
+ require_relative "simple_logger/version"
7
+ require_relative "simple_logger/logger"
8
+ require_relative "simple_logger/klass_logger"
9
+
10
+ module RubySmart
11
+ module SimpleLogger
12
+ # delegate new method to logger
13
+ def self.new(*args)
14
+ RubySmart::SimpleLogger::Logger.new(*args)
15
+ end
16
+ end
17
+ end
18
+
19
+ # load date extensions for logger
20
+ if GemInfo.loaded?('activesupport') && GemInfo.installed?('actionview')
21
+ ActiveSupport.on_load(:action_view) do
22
+ require('action_view/helpers/date_helper')
23
+ RubySmart::SimpleLogger::Logger.include(ActionView::Helpers::DateHelper)
24
+ end
25
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ruby_smart/simple_logger'
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ruby_smart/simple_logger'
4
+
5
+ class SimpleLogger
6
+ extend ::RubySmart::SimpleLogger::KlassLogger
7
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/ruby_smart/simple_logger/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "ruby_smart-simple_logger"
7
+ spec.version = RubySmart::SimpleLogger.version
8
+ spec.authors = ['Tobias Gonsior']
9
+ spec.email = ['info@ruby-smart.org']
10
+
11
+ spec.summary = "A simple, multifunctional logging library for Ruby."
12
+ spec.description = <<~DESC
13
+ RubySmart::SimpleLogger is a fast, customizable logging library with multi-device support,
14
+ special (PRE-defined) scenes for better logging visibility.
15
+ DESC
16
+
17
+ spec.homepage = 'https://github.com/ruby-smart/simple_logger'
18
+ spec.license = 'MIT'
19
+ spec.required_ruby_version = '>= 2.6.0'
20
+
21
+ spec.metadata['homepage_uri'] = spec.homepage
22
+ spec.metadata['source_code_uri'] = 'https://github.com/ruby-smart/simple_logger'
23
+ spec.metadata['documentation_uri'] = 'https://rubydoc.info/gems/ruby_smart-simple_logger'
24
+ spec.metadata['changelog_uri'] = "#{spec.metadata["source_code_uri"]}/blob/main/docs/CHANGELOG.md"
25
+
26
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
27
+
28
+ # Specify which files should be added to the gem when it is released.
29
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
30
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
31
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
32
+ end
33
+
34
+ spec.require_paths = ['lib']
35
+
36
+ spec.add_dependency 'ruby_smart-support', '~> 1.2'
37
+
38
+ spec.add_development_dependency 'awesome_print', '~> 1.9'
39
+ spec.add_development_dependency 'coveralls_reborn', '~> 0.25'
40
+ spec.add_development_dependency 'rake', '~> 13.0'
41
+ spec.add_development_dependency 'rspec', '~> 3.0'
42
+ spec.add_development_dependency 'yard', '~> 0.9'
43
+ end
metadata ADDED
@@ -0,0 +1,167 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby_smart-simple_logger
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Tobias Gonsior
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-01-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ruby_smart-support
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: awesome_print
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.9'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: coveralls_reborn
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.25'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.25'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '13.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '13.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: yard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.9'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.9'
97
+ description: "RubySmart::SimpleLogger is a fast, customizable logging library with
98
+ multi-device support, \nspecial (PRE-defined) scenes for better logging visibility.\n"
99
+ email:
100
+ - info@ruby-smart.org
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".github/workflows/ruby.yml"
106
+ - ".gitignore"
107
+ - ".rspec"
108
+ - ".yardopts"
109
+ - Gemfile
110
+ - README.md
111
+ - Rakefile
112
+ - bin/console
113
+ - bin/setup
114
+ - docs/CHANGELOG.md
115
+ - docs/CODE_OF_CONDUCT.md
116
+ - docs/LICENSE.txt
117
+ - lib/debugger.rb
118
+ - lib/ruby_smart-simple_logger.rb
119
+ - lib/ruby_smart/simple_logger.rb
120
+ - lib/ruby_smart/simple_logger/core_ext/ruby/string.rb
121
+ - lib/ruby_smart/simple_logger/devices/memory_device.rb
122
+ - lib/ruby_smart/simple_logger/devices/multi_device.rb
123
+ - lib/ruby_smart/simple_logger/devices/proc_device.rb
124
+ - lib/ruby_smart/simple_logger/extensions/helper.rb
125
+ - lib/ruby_smart/simple_logger/extensions/logs.rb
126
+ - lib/ruby_smart/simple_logger/extensions/mask.rb
127
+ - lib/ruby_smart/simple_logger/extensions/scene.rb
128
+ - lib/ruby_smart/simple_logger/extensions/severity.rb
129
+ - lib/ruby_smart/simple_logger/extensions/simple_log.rb
130
+ - lib/ruby_smart/simple_logger/extensions/timer.rb
131
+ - lib/ruby_smart/simple_logger/formatter.rb
132
+ - lib/ruby_smart/simple_logger/gem_version.rb
133
+ - lib/ruby_smart/simple_logger/klass_logger.rb
134
+ - lib/ruby_smart/simple_logger/logger.rb
135
+ - lib/ruby_smart/simple_logger/scenes.rb
136
+ - lib/ruby_smart/simple_logger/version.rb
137
+ - lib/simple_logger.rb
138
+ - ruby_smart-simple_logger.gemspec
139
+ homepage: https://github.com/ruby-smart/simple_logger
140
+ licenses:
141
+ - MIT
142
+ metadata:
143
+ homepage_uri: https://github.com/ruby-smart/simple_logger
144
+ source_code_uri: https://github.com/ruby-smart/simple_logger
145
+ documentation_uri: https://rubydoc.info/gems/ruby_smart-simple_logger
146
+ changelog_uri: https://github.com/ruby-smart/simple_logger/blob/main/docs/CHANGELOG.md
147
+ allowed_push_host: https://rubygems.org
148
+ post_install_message:
149
+ rdoc_options: []
150
+ require_paths:
151
+ - lib
152
+ required_ruby_version: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: 2.6.0
157
+ required_rubygems_version: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ requirements: []
163
+ rubygems_version: 3.3.7
164
+ signing_key:
165
+ specification_version: 4
166
+ summary: A simple, multifunctional logging library for Ruby.
167
+ test_files: []