ruby_smart-simple_logger 1.0.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.
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: []