ruby_smart-simple_logger 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.github/workflows/ruby.yml +38 -0
- data/.gitignore +25 -0
- data/.rspec +3 -0
- data/.yardopts +5 -0
- data/Gemfile +7 -0
- data/README.md +739 -0
- data/Rakefile +8 -0
- data/bin/console +8 -0
- data/bin/setup +8 -0
- data/docs/CHANGELOG.md +17 -0
- data/docs/CODE_OF_CONDUCT.md +84 -0
- data/docs/LICENSE.txt +21 -0
- data/lib/debugger.rb +20 -0
- data/lib/ruby_smart/simple_logger/core_ext/ruby/string.rb +43 -0
- data/lib/ruby_smart/simple_logger/devices/memory_device.rb +43 -0
- data/lib/ruby_smart/simple_logger/devices/multi_device.rb +69 -0
- data/lib/ruby_smart/simple_logger/devices/proc_device.rb +37 -0
- data/lib/ruby_smart/simple_logger/extensions/helper.rb +259 -0
- data/lib/ruby_smart/simple_logger/extensions/logs.rb +26 -0
- data/lib/ruby_smart/simple_logger/extensions/mask.rb +53 -0
- data/lib/ruby_smart/simple_logger/extensions/scene.rb +77 -0
- data/lib/ruby_smart/simple_logger/extensions/severity.rb +62 -0
- data/lib/ruby_smart/simple_logger/extensions/simple_log.rb +224 -0
- data/lib/ruby_smart/simple_logger/extensions/timer.rb +63 -0
- data/lib/ruby_smart/simple_logger/formatter.rb +153 -0
- data/lib/ruby_smart/simple_logger/gem_version.rb +23 -0
- data/lib/ruby_smart/simple_logger/klass_logger.rb +45 -0
- data/lib/ruby_smart/simple_logger/logger.rb +74 -0
- data/lib/ruby_smart/simple_logger/scenes.rb +288 -0
- data/lib/ruby_smart/simple_logger/version.rb +12 -0
- data/lib/ruby_smart/simple_logger.rb +25 -0
- data/lib/ruby_smart-simple_logger.rb +3 -0
- data/lib/simple_logger.rb +7 -0
- data/ruby_smart-simple_logger.gemspec +43 -0
- metadata +167 -0
data/README.md
ADDED
@@ -0,0 +1,739 @@
|
|
1
|
+
# RubySmart::SimpleLogger
|
2
|
+
|
3
|
+
[![GitHub](https://img.shields.io/badge/github-ruby--smart/simple_logger-blue.svg)](http://github.com/ruby-smart/simple_logger)
|
4
|
+
[![Documentation](https://img.shields.io/badge/docs-rdoc.info-blue.svg)](http://rubydoc.info/gems/ruby_smart-simple_logger)
|
5
|
+
|
6
|
+
[![Gem Version](https://badge.fury.io/rb/ruby_smart-simple_logger.svg?kill_cache=1)](https://badge.fury.io/rb/ruby_smart-simple_logger)
|
7
|
+
[![License](https://img.shields.io/github/license/ruby-smart/simple_logger)](docs/LICENSE.txt)
|
8
|
+
|
9
|
+
[![Coverage Status](https://coveralls.io/repos/github/ruby-smart/simple_logger/badge.svg?branch=main&kill_cache=1)](https://coveralls.io/github/ruby-smart/simple_logger?branch=main)
|
10
|
+
[![Tests](https://github.com/ruby-smart/simple_logger/actions/workflows/ruby.yml/badge.svg)](https://github.com/ruby-smart/simple_logger/actions/workflows/ruby.yml)
|
11
|
+
|
12
|
+
A simple, multifunctional logging library for Ruby.
|
13
|
+
It features a fast, customizable logging with multi-device support (e.g. log to STDOUT AND file).
|
14
|
+
Special (PRE-defined) scenes can be used for interactive CLI and better logging visibility.
|
15
|
+
|
16
|
+
-----
|
17
|
+
|
18
|
+
## Installation
|
19
|
+
|
20
|
+
Add this line to your application's Gemfile:
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
gem 'ruby_smart-simple_logger'
|
24
|
+
```
|
25
|
+
|
26
|
+
And then execute:
|
27
|
+
|
28
|
+
$ bundle install
|
29
|
+
|
30
|
+
Or install it yourself as:
|
31
|
+
|
32
|
+
$ gem install ruby_smart-simple_logger
|
33
|
+
|
34
|
+
-----
|
35
|
+
|
36
|
+
## Enhancements
|
37
|
+
* PRE-defined scenes to fastly create a simple, structured CLI output. _(see [Scenes](#scenes))_
|
38
|
+
* Better log-visibility with masked output through scenes
|
39
|
+
* ```awesome_print``` gem compatibility for a prettified object debug
|
40
|
+
* Multi-device support (write to logfile & to STDOUT & to ... & to ...)
|
41
|
+
* 'klass_logger' instances for easier access _(see [klass_logger](#klass_logger_Usage))_
|
42
|
+
|
43
|
+
-----
|
44
|
+
|
45
|
+
## Examples
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
require 'simple_logger'
|
49
|
+
|
50
|
+
logger = ::SimpleLogger.new
|
51
|
+
|
52
|
+
logger.debug @my_custom_object, "test title"
|
53
|
+
# =========================================== [test title] ===========================================
|
54
|
+
# {
|
55
|
+
# :a => "hash",
|
56
|
+
# :with => {
|
57
|
+
# :example => :data
|
58
|
+
# }
|
59
|
+
# }
|
60
|
+
# ====================================================================================================
|
61
|
+
```
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
logger = ::SimpleLogger.new(:memory)
|
65
|
+
logger.debug "some debug"
|
66
|
+
logger.info "some info"
|
67
|
+
|
68
|
+
# uses a new SUB-severity of INFO to handle with error / success logs
|
69
|
+
logger.success "success called"
|
70
|
+
|
71
|
+
logger.logs
|
72
|
+
# => [
|
73
|
+
# [:debug, 2022-07-07 10:58:35 +0200, "some debug"],
|
74
|
+
# [:info, 2022-07-07 10:58:35 +0200, "some info"],
|
75
|
+
# [:success, 2022-07-07 10:58:35 +0200, "success called"]
|
76
|
+
# ]
|
77
|
+
```
|
78
|
+
|
79
|
+
```ruby
|
80
|
+
require 'simple_logger'
|
81
|
+
|
82
|
+
logger = ::SimpleLogger.new
|
83
|
+
|
84
|
+
logger.theme "Jobs to do"
|
85
|
+
logger.job_result "A custom job", true
|
86
|
+
logger.job_result "A other job", "failed", false
|
87
|
+
logger.job_result "Just a job", "unknown", :yellow
|
88
|
+
|
89
|
+
# # Jobs to do
|
90
|
+
# -------------------------------------------------------------------------------------
|
91
|
+
# - A custom job => true
|
92
|
+
# - A other job => failed
|
93
|
+
# - Just a job => unknown
|
94
|
+
```
|
95
|
+
|
96
|
+
-----
|
97
|
+
|
98
|
+
## Usage
|
99
|
+
|
100
|
+
You can either create your own logger instance, by calling **new** on the ::SimpleLogger class or using the logger as a **klass_logger**.
|
101
|
+
|
102
|
+
### Instance Usage
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
require 'simple_logger'
|
106
|
+
|
107
|
+
# providing no 'builtin' parameter will auto-detect the best logging solution
|
108
|
+
# - for CLI / windowed programs it'll send the logs to STDOUT.
|
109
|
+
# - for rails applications it'll forward all logs to the Rails logger.
|
110
|
+
# - otherwise it'll store the logs in memory
|
111
|
+
logger = ::SimpleLogger.new
|
112
|
+
logger.debug "some debug"
|
113
|
+
logger.error "that failed ..."
|
114
|
+
|
115
|
+
alternative_logger = ::SimpleLogger.new :memory
|
116
|
+
alternative_logger.debug "some debug, just in memory logs"
|
117
|
+
alternative_logger.error "that failed, also in memory logs..."
|
118
|
+
|
119
|
+
# access the logs as array
|
120
|
+
alternative_logger.logs
|
121
|
+
# => [[:debug, 2022-07-06 14:49:40 +0200, "some debug, just in memory logs"], [:error, 2022-07-06 14:49:40 +0200, "that failed, also in memory logs..."]]
|
122
|
+
|
123
|
+
# access the logs as grouped hash
|
124
|
+
alternative_logger.logs_to_h
|
125
|
+
#=> {:debug=>["some debug, just in memory logs"], :error=>["that failed, also in memory logs..."]}
|
126
|
+
```
|
127
|
+
_You can also create a new instance from every klass_logger Object (see below)._
|
128
|
+
|
129
|
+
### klass_logger Usage
|
130
|
+
|
131
|
+
Instead of creating a new instance you can also create klass_logger on every module by simply extending the `::SimpleLogger::KlassLogger` module.
|
132
|
+
```ruby
|
133
|
+
module MyCustomLogger
|
134
|
+
extend ::RubySmart::SimpleLogger::KlassLogger
|
135
|
+
|
136
|
+
self.klass_logger_opts = {builtin: :stdout, clr: true}
|
137
|
+
end
|
138
|
+
|
139
|
+
MyCustomLogger.debug "some debug"
|
140
|
+
MyCustomLogger.error "that failed ...", "It's an error title for better visibility"
|
141
|
+
MyCustomLogger.theme "My Theme"
|
142
|
+
|
143
|
+
# log directly to a customized logfile - created through the builtin module name
|
144
|
+
MyCustomLogger.klass_logger_opts = {builtin: MyApp::Tasks::SpecialTask}
|
145
|
+
MyCustomLogger.clear!
|
146
|
+
MyCustomLogger.info "Very nice here"
|
147
|
+
# => creates a logfile @ log/my_app/tasks/special_task.log
|
148
|
+
```
|
149
|
+
|
150
|
+
This is already done for the `SimpleLogger` module - so you can directly access the methods:
|
151
|
+
```ruby
|
152
|
+
require 'simple_logger'
|
153
|
+
|
154
|
+
SimpleLogger.debug "some debug"
|
155
|
+
SimpleLogger.error "that failed ..."
|
156
|
+
|
157
|
+
# resetting options
|
158
|
+
SimpleLogger.klass_logger_opts = {builtin: :memory, stdout: false}
|
159
|
+
SimpleLogger.clear!
|
160
|
+
|
161
|
+
SimpleLogger.debug "some other debug in memory only ..."
|
162
|
+
SimpleLogger.logs
|
163
|
+
|
164
|
+
# create new logger from current SimpleLogger module
|
165
|
+
# this will also use the current 'klass_logger_opts', if no other opts are provided ...
|
166
|
+
other_logger = SimpleLogger.new
|
167
|
+
other_logger.debug "some other debug in memory only ..."
|
168
|
+
|
169
|
+
# create new logger, but don't use 'klass_logger_opts' - instead pipe to the rails logger
|
170
|
+
other_logger2 = SimpleLogger.new :rails
|
171
|
+
other_logger2.info "directly logs to the rails logger"
|
172
|
+
```
|
173
|
+
|
174
|
+
-----
|
175
|
+
|
176
|
+
## Builtins
|
177
|
+
|
178
|
+
While you can just build a new logger _(or use the klass_logger)_ without any arguments, you can also create a new one with builtins.
|
179
|
+
|
180
|
+
### nil Builtin
|
181
|
+
|
182
|
+
A ```nil``` builtin will auto-detect the best logging solution for you.
|
183
|
+
For CLI or windowed programs it'll just send the logs to ```STDOUT```.
|
184
|
+
For rails-applications it'll send to the current ```Rails.logger``` instance.
|
185
|
+
Otherwise it'll store logs temporary in memory _(accessible through the #logs method)_
|
186
|
+
|
187
|
+
**Example:**
|
188
|
+
```ruby
|
189
|
+
logger = ::SimpleLogger.new
|
190
|
+
logger.debug "some debug"
|
191
|
+
```
|
192
|
+
|
193
|
+
### stdout / stderr Builtin
|
194
|
+
|
195
|
+
A ```:stdout / :stderr``` builtin will send to ```STDOUT / STDERR``` and uses a colored output by default.
|
196
|
+
|
197
|
+
**Example:**
|
198
|
+
```ruby
|
199
|
+
logger = ::SimpleLogger.new(:stdout)
|
200
|
+
|
201
|
+
# creates a nice debug output (by default)
|
202
|
+
# ============================================== [Debug] =============================================
|
203
|
+
# "some debug"
|
204
|
+
# ====================================================================================================
|
205
|
+
logger.debug "some debug"
|
206
|
+
```
|
207
|
+
|
208
|
+
### rails Builtin
|
209
|
+
|
210
|
+
A ```:rails``` builtin will always send to the ```Rails.logger``` instance.
|
211
|
+
|
212
|
+
**Example:**
|
213
|
+
```ruby
|
214
|
+
logger = ::SimpleLogger.new(:rails)
|
215
|
+
|
216
|
+
# sends data to the Rails.logger
|
217
|
+
logger.debug "some debug"
|
218
|
+
```
|
219
|
+
|
220
|
+
### proc Builtin
|
221
|
+
|
222
|
+
A ```:proc``` builtin will call the provided proc _(through ```options[:proc]```)_ everytime a log will be written.
|
223
|
+
|
224
|
+
The data will be provided as array _( ```[severity, time, progname, data]``` )_.
|
225
|
+
|
226
|
+
**Example:**
|
227
|
+
```ruby
|
228
|
+
proc = lambda{|data| puts "---> #{data[0]} | #{data[3]} <---"}
|
229
|
+
|
230
|
+
logger = ::SimpleLogger.new(:proc, proc: proc)
|
231
|
+
|
232
|
+
# calls the proc with data-array
|
233
|
+
# => ---> DEBUG | some debug <---
|
234
|
+
logger.debug "some debug"
|
235
|
+
```
|
236
|
+
|
237
|
+
### memory Builtin
|
238
|
+
|
239
|
+
A ```:memory``` builtin will always store the logged data within an _instance variable_ and can be accessed through the ```#logs``` or ```#logs_to_h``` methods.
|
240
|
+
|
241
|
+
**Example:**
|
242
|
+
```ruby
|
243
|
+
logger = ::SimpleLogger.new(:memory)
|
244
|
+
logger.debug "some debug"
|
245
|
+
logger.info "some info"
|
246
|
+
|
247
|
+
# uses a new SUB-severity of INFO to handle with error / success logs
|
248
|
+
logger.success "success called"
|
249
|
+
|
250
|
+
logger.logs
|
251
|
+
# => [
|
252
|
+
# [:debug, 2022-07-07 10:58:35 +0200, "some debug"],
|
253
|
+
# [:info, 2022-07-07 10:58:35 +0200, "some info"],
|
254
|
+
# [:success, 2022-07-07 10:58:35 +0200, "success called"]
|
255
|
+
# ]
|
256
|
+
```
|
257
|
+
|
258
|
+
### String Builtin
|
259
|
+
|
260
|
+
Providing a ```String``` will always create and write to a new logfile.
|
261
|
+
|
262
|
+
**Example:**
|
263
|
+
```ruby
|
264
|
+
# creates a new logfile @ log/a_custom/logfile.log
|
265
|
+
# IMPORTANT: I'll also create a colored, masked output by default and uses the awesome_print pretty debug...
|
266
|
+
#
|
267
|
+
# # Logfile created on 2022-07-07 11:01:27 +0200 by logger.rb/66358
|
268
|
+
# [1;34m============================================== [Debug] =============================================[0m
|
269
|
+
# [0;33m"some debug"[0m
|
270
|
+
# [1;34m====================================================================================================[0m
|
271
|
+
logger = ::SimpleLogger.new('a_custom/logfile.log')
|
272
|
+
logger.debug "some debug"
|
273
|
+
|
274
|
+
|
275
|
+
# creates a new logfile @ log/a_custom/other_logfile.log
|
276
|
+
# Does NOT create a colored output and prevent inspection (e.g. by awesome_print)
|
277
|
+
#
|
278
|
+
# Logfile created on 2022-07-07 11:04:17 +0200 by logger.rb/66358
|
279
|
+
# ============================================== [Debug] =============================================
|
280
|
+
# some debug without color, but with mask
|
281
|
+
# ====================================================================================================
|
282
|
+
other_logger = ::SimpleLogger.new('a_custom/other_logfile.log', clr: false, inspect: false)
|
283
|
+
other_logger.debug "some debug without color, but with mask"
|
284
|
+
|
285
|
+
|
286
|
+
# creates a new logfile @ log/a_custom/noformat_logfile.log
|
287
|
+
# Prevents logs with masks (or other payloads)
|
288
|
+
#
|
289
|
+
# # Logfile created on 2022-07-07 11:34:38 +0200 by logger.rb/66358
|
290
|
+
# D, [2022-07-07T11:34:39.056395 #23253] DEBUG -- : some debug without color and mask - uses the default format
|
291
|
+
noformat_logger = ::SimpleLogger.new('a_custom/noformat_logfile.log', format: :default, payload: false)
|
292
|
+
noformat_logger.debug "some debug without color and mask - uses the default format"
|
293
|
+
```
|
294
|
+
|
295
|
+
### Module Builtin
|
296
|
+
|
297
|
+
Providing a ```Module``` will also create and write to a new logfile.
|
298
|
+
The path depends on the provided module name.
|
299
|
+
|
300
|
+
**Example:**
|
301
|
+
```ruby
|
302
|
+
# creates a new logfile @ log/users/jobs/import.log
|
303
|
+
# IMPORTANT: I'll also create a colored, masked output by default and uses the awesome_print pretty debug...
|
304
|
+
#
|
305
|
+
# # Logfile created on 2022-07-07 11:01:27 +0200 by logger.rb/66358
|
306
|
+
# [1;34m============================================== [Debug] =============================================[0m
|
307
|
+
# [0;33m"some debug"[0m
|
308
|
+
# [1;34m====================================================================================================[0m
|
309
|
+
logger = ::SimpleLogger.new(Users::Jobs::Import)
|
310
|
+
logger.debug "some debug"
|
311
|
+
```
|
312
|
+
|
313
|
+
### other Builtin
|
314
|
+
|
315
|
+
Providing any other Object must respond to ```#write```.
|
316
|
+
|
317
|
+
-----
|
318
|
+
|
319
|
+
## Formats
|
320
|
+
|
321
|
+
The default formatter _(if no other was provided through ```opts[:formatter```)_ will provide the following PRE-defined formats:
|
322
|
+
_Also prints a colored output by default._
|
323
|
+
|
324
|
+
### default Format
|
325
|
+
|
326
|
+
The **default** format equals the Ruby's Formatter - by default also prints a colored output:
|
327
|
+
|
328
|
+
```ruby
|
329
|
+
logger = ::SimpleLogger.new(:stdout, format: :default, payload: false)
|
330
|
+
|
331
|
+
# D, [2022-07-07T12:22:16.364920 #27527] DEBUG -- : debug message
|
332
|
+
logger.debug "debug message"
|
333
|
+
```
|
334
|
+
|
335
|
+
### passthrough Format
|
336
|
+
|
337
|
+
The **passthrough** format is mostly used to just 'passthrough' all args to the device _(proc, memory, file, etc.)_ without formatting anything.
|
338
|
+
This will just provide an array of args.
|
339
|
+
|
340
|
+
```ruby
|
341
|
+
logger = ::SimpleLogger.new(:stdout, format: :passthrough, payload: false)
|
342
|
+
|
343
|
+
# ["DEBUG", 2022-07-07 12:25:59 +0200, nil, "debug message"]
|
344
|
+
logger.debug "debug message"
|
345
|
+
```
|
346
|
+
|
347
|
+
### plain Format
|
348
|
+
|
349
|
+
The **plain** format is only used to forward the provided **data**, without severity, time, etc.
|
350
|
+
This is the default behaviour of the SimpleLogger - which is used to build `scene`, masks, ...
|
351
|
+
|
352
|
+
```ruby
|
353
|
+
logger = ::SimpleLogger.new(:stdout, format: :plain, payload: false)
|
354
|
+
|
355
|
+
# debug message
|
356
|
+
logger.debug "debug message"
|
357
|
+
|
358
|
+
# with payload
|
359
|
+
payload_logger = ::SimpleLogger.new(:stdout, format: :plain)
|
360
|
+
|
361
|
+
# ============================================== [Debug] =============================================
|
362
|
+
# "debug message"
|
363
|
+
# ====================================================================================================
|
364
|
+
payload_logger.debug "debug message"
|
365
|
+
```
|
366
|
+
|
367
|
+
### memory Format
|
368
|
+
|
369
|
+
The **memory** format is only used by the memory-device to store severity, time & data as an array.
|
370
|
+
|
371
|
+
```ruby
|
372
|
+
logger = ::SimpleLogger.new(:stdout, format: :memory, payload: false)
|
373
|
+
|
374
|
+
# [:debug, 2022-07-07 12:31:19 +0200, "debug message"]
|
375
|
+
logger.debug "debug message"
|
376
|
+
```
|
377
|
+
|
378
|
+
### datalog Format
|
379
|
+
|
380
|
+
The **datalog** format is used to store every log in a structured data.
|
381
|
+
For datalogs the colored output should also be disabled!
|
382
|
+
|
383
|
+
```ruby
|
384
|
+
logger = ::SimpleLogger.new(:stdout, format: :datalog, payload: false, clr: false)
|
385
|
+
|
386
|
+
# [ DEBUG] [2022-07-07 12:31:43] [#27527] [debug message]
|
387
|
+
logger.debug "debug message"
|
388
|
+
```
|
389
|
+
|
390
|
+
-----
|
391
|
+
|
392
|
+
## Options
|
393
|
+
|
394
|
+
Independent of the **builtins** you can still provide custom options for the logger:
|
395
|
+
|
396
|
+
### device
|
397
|
+
|
398
|
+
Provide a custom device.
|
399
|
+
```ruby
|
400
|
+
logger = ::SimpleLogger.new(device: @my_custom_device)
|
401
|
+
|
402
|
+
# same like above
|
403
|
+
logger = ::SimpleLogger.new(@my_custom_device)
|
404
|
+
```
|
405
|
+
|
406
|
+
### clr
|
407
|
+
|
408
|
+
Disable colored output.
|
409
|
+
```ruby
|
410
|
+
logger = ::SimpleLogger.new(clr: false)
|
411
|
+
logger = ::SimpleLogger.new(:stdout, clr: false)
|
412
|
+
```
|
413
|
+
|
414
|
+
### payload
|
415
|
+
|
416
|
+
Disable payloads _(from scenes)_.
|
417
|
+
```ruby
|
418
|
+
logger = ::SimpleLogger.new(payload: false)
|
419
|
+
logger = ::SimpleLogger.new(:stdout, payload: false)
|
420
|
+
```
|
421
|
+
|
422
|
+
### format _(for default formatter ONLY)_
|
423
|
+
|
424
|
+
Provide a other format.
|
425
|
+
Possible values: ```:default, :passthrough, :plain, :memory, :datalog```
|
426
|
+
```ruby
|
427
|
+
logger = ::SimpleLogger.new(format: :default)
|
428
|
+
logger = ::SimpleLogger.new(:memory, format: :passthrough)
|
429
|
+
```
|
430
|
+
|
431
|
+
### nl _(for default formatter ONLY)_
|
432
|
+
|
433
|
+
Enable / disable NewLine for formatter.
|
434
|
+
```ruby
|
435
|
+
logger = ::SimpleLogger.new(format: :default, nl: false, payload: false, clr: false)
|
436
|
+
logger.debug "debug 1"
|
437
|
+
logger.debug "debug 2"
|
438
|
+
# D, [2022-07-07T13:42:25.323359 #32139] DEBUG -- : debug 1D, [2022-07-07T13:42:25.323501 #32139] DEBUG -- : debug 2
|
439
|
+
```
|
440
|
+
|
441
|
+
### proc _(:proc-builtin ONLY)_
|
442
|
+
|
443
|
+
Provide a callback for the ```:proc``` builtin.
|
444
|
+
```ruby
|
445
|
+
logger = ::SimpleLogger.new(:proc, proc: lambda{|data| ... })
|
446
|
+
```
|
447
|
+
|
448
|
+
### stdout _(:memory-builtin ONLY)_
|
449
|
+
|
450
|
+
Enable STDOUT as MultiDevice for the memory builtin.
|
451
|
+
```ruby
|
452
|
+
logger = ::SimpleLogger.new(:memory, stdout: true)
|
453
|
+
|
454
|
+
# same as above
|
455
|
+
logger = ::SimpleLogger.new(
|
456
|
+
::SimpleLogger::Devices::MultiDevice.new.
|
457
|
+
register(::SimpleLogger::Devices::MemoryDevice.new, ::SimpleLogger::Formatter.new(format: :memory, nl: false)).
|
458
|
+
register(STDOUT, ::SimpleLogger::Formatter.new(format: :default, nl: true, clr: (opts[:clr] != nil)))
|
459
|
+
)
|
460
|
+
```
|
461
|
+
|
462
|
+
### mask
|
463
|
+
|
464
|
+
Provide custom mask options.
|
465
|
+
```ruby
|
466
|
+
logger = ::SimpleLogger.new(mask: { char: '#', length: 50, clr: :purple })
|
467
|
+
logger.debug "debug text"
|
468
|
+
# ##################### [Debug] ####################
|
469
|
+
# "debug text"
|
470
|
+
# ##################################################
|
471
|
+
```
|
472
|
+
|
473
|
+
### level
|
474
|
+
|
475
|
+
Change the severity level.
|
476
|
+
```ruby
|
477
|
+
logger = ::SimpleLogger.new(level: :info)
|
478
|
+
logger.debug "debug text"
|
479
|
+
# => false
|
480
|
+
|
481
|
+
logger.info "info text"
|
482
|
+
# ============================================== [Info] ==============================================
|
483
|
+
# info text
|
484
|
+
# ====================================================================================================
|
485
|
+
```
|
486
|
+
|
487
|
+
### formatter
|
488
|
+
|
489
|
+
Provide a custom formatter instance.
|
490
|
+
```ruby
|
491
|
+
logger = ::SimpleLogger.new(formatter: My::Custom::Formatter.new)
|
492
|
+
```
|
493
|
+
|
494
|
+
### clr
|
495
|
+
|
496
|
+
Disable color for payload and formatter.
|
497
|
+
|
498
|
+
```ruby
|
499
|
+
logger = ::SimpleLogger.new(clr: false)
|
500
|
+
```
|
501
|
+
|
502
|
+
### payload
|
503
|
+
|
504
|
+
Disable payload _(mask & scenes)_ for logger
|
505
|
+
|
506
|
+
```ruby
|
507
|
+
logger = ::SimpleLogger.new(payload: false)
|
508
|
+
logger.debug "some debug without payload"
|
509
|
+
# some debug without payload
|
510
|
+
```
|
511
|
+
|
512
|
+
### inspect
|
513
|
+
|
514
|
+
Disable inspect for logger
|
515
|
+
|
516
|
+
```ruby
|
517
|
+
logger = ::SimpleLogger.new(inspect: false)
|
518
|
+
logger.debug({a: {custom: 'object'}})
|
519
|
+
# {:a => { :custom => "object" } }
|
520
|
+
```
|
521
|
+
|
522
|
+
### inspector
|
523
|
+
|
524
|
+
Provide a other ```inspector``` method for the data-debug.
|
525
|
+
|
526
|
+
```ruby
|
527
|
+
logger = ::SimpleLogger.new(inspector: :to_s)
|
528
|
+
logger.debug({ a: 1, b: 2 })
|
529
|
+
# some debug without inspector
|
530
|
+
# ============================================== [Debug] =============================================
|
531
|
+
# {:a=>1, :b=>2}
|
532
|
+
# ====================================================================================================
|
533
|
+
```
|
534
|
+
|
535
|
+
## _defaults_
|
536
|
+
|
537
|
+
Logger default options are still available: ```shift_age, shift_size, progname, datetime_format, shift_period_suffix```
|
538
|
+
|
539
|
+
-----
|
540
|
+
|
541
|
+
## Scenes
|
542
|
+
|
543
|
+
The following PRE-defined scenes are available. _(You can define your own scenes by using the class method ```.scene```)_
|
544
|
+
|
545
|
+
### debug(data, subject = 'Debug')
|
546
|
+
```ruby
|
547
|
+
# debug method
|
548
|
+
# severity: debug
|
549
|
+
# prints: prettified data by using the 'inspect' method
|
550
|
+
#
|
551
|
+
# > ================================================= [Debug] ================================================
|
552
|
+
# > "DEBUGGED DATA" <- analyzed by awesome_print#ai method
|
553
|
+
# > ==========================================================================================================
|
554
|
+
```
|
555
|
+
|
556
|
+
### info, warn, error, fatal, success (data, subject = 'name')
|
557
|
+
```ruby
|
558
|
+
# info method (BASE)
|
559
|
+
# severity: methods name
|
560
|
+
# prints: enclosed data
|
561
|
+
#
|
562
|
+
# > ================================================= [Info] =================================================
|
563
|
+
# > DATA
|
564
|
+
# > ==========================================================================================================
|
565
|
+
```
|
566
|
+
|
567
|
+
### header(subject)
|
568
|
+
```ruby
|
569
|
+
# header method
|
570
|
+
# severity: debug
|
571
|
+
# prints: prettified subject
|
572
|
+
#
|
573
|
+
# > ===========================================================================================================
|
574
|
+
# > ================================================ <Subject> ================================================
|
575
|
+
# > ===========================================================================================================
|
576
|
+
```
|
577
|
+
|
578
|
+
### footer(subject)
|
579
|
+
```ruby
|
580
|
+
# footer method
|
581
|
+
# severity: debug
|
582
|
+
# prints: prettified subject
|
583
|
+
#
|
584
|
+
# > ===========================================================================================================
|
585
|
+
# > ================================================ >Subject< ================================================
|
586
|
+
# > ===========================================================================================================
|
587
|
+
```
|
588
|
+
|
589
|
+
### topic(subject)
|
590
|
+
```ruby
|
591
|
+
# topic method
|
592
|
+
# severity: debug
|
593
|
+
# prints: prettified subject
|
594
|
+
#
|
595
|
+
# > --------------------------------------------------------------------------------
|
596
|
+
# > #----------------------------------- Subject ----------------------------------#
|
597
|
+
```
|
598
|
+
|
599
|
+
### theme(subject)
|
600
|
+
```ruby
|
601
|
+
# theme method
|
602
|
+
# severity: debug
|
603
|
+
# prints: prettified, colored subject
|
604
|
+
#
|
605
|
+
# > # Subject
|
606
|
+
# > ----------------------------------------------------------------------
|
607
|
+
```
|
608
|
+
|
609
|
+
### theme_result(result, status = nil)
|
610
|
+
```ruby
|
611
|
+
# theme_result method
|
612
|
+
# severity: debug
|
613
|
+
# prints: prettified, colored result
|
614
|
+
#
|
615
|
+
# > ----------------------------------------------------------------------
|
616
|
+
# > -> Result
|
617
|
+
# >
|
618
|
+
```
|
619
|
+
|
620
|
+
### theme_line
|
621
|
+
```ruby
|
622
|
+
# theme_line method
|
623
|
+
# severity: debug
|
624
|
+
# prints: colored line with no text
|
625
|
+
#
|
626
|
+
# > ----------------------------------------------------------------------
|
627
|
+
```
|
628
|
+
|
629
|
+
### desc(description)
|
630
|
+
```ruby
|
631
|
+
# desc method
|
632
|
+
# severity: debug
|
633
|
+
# prints: colored text
|
634
|
+
#
|
635
|
+
# > "description"
|
636
|
+
# >
|
637
|
+
```
|
638
|
+
|
639
|
+
### job(name)
|
640
|
+
```ruby
|
641
|
+
# job method
|
642
|
+
# severity: debug
|
643
|
+
# prints: colored line with job name (on inline formatter it prevents a line-break)
|
644
|
+
# calls the result method if a block was provided
|
645
|
+
#
|
646
|
+
# > - Job name =>
|
647
|
+
# ________________________________________________________________ <- 64 chars
|
648
|
+
```
|
649
|
+
|
650
|
+
### sub_job(name)
|
651
|
+
```ruby
|
652
|
+
# sub_job method
|
653
|
+
# severity: debug
|
654
|
+
# prints: line with job name (on inline formatter it prevents a line-break)
|
655
|
+
# calls the result method if a block was provided
|
656
|
+
#
|
657
|
+
# > * Subjob name =>
|
658
|
+
# ______________________________________________________________ <- 62 chars
|
659
|
+
```
|
660
|
+
|
661
|
+
### result(result, status = nil)
|
662
|
+
```ruby
|
663
|
+
# result method
|
664
|
+
# severity: debug
|
665
|
+
# prints: colored result
|
666
|
+
#
|
667
|
+
# > Result
|
668
|
+
```
|
669
|
+
|
670
|
+
### job_result(name, result, status = nil)
|
671
|
+
```ruby
|
672
|
+
# job_result method
|
673
|
+
# severity: debug
|
674
|
+
# prints: job with combined colored result
|
675
|
+
#
|
676
|
+
# > - Job name => Result
|
677
|
+
```
|
678
|
+
|
679
|
+
### sub_job_result(name, result, status = nil)
|
680
|
+
```ruby
|
681
|
+
# sub_job_result method
|
682
|
+
# severity: debug
|
683
|
+
# prints: sub_job with combined colored result
|
684
|
+
#
|
685
|
+
# > * Subjob name => Result
|
686
|
+
```
|
687
|
+
|
688
|
+
### spec(status)
|
689
|
+
```ruby
|
690
|
+
# spec method
|
691
|
+
# severity: debug
|
692
|
+
# prints: colored spec result string - depending on the status (on inline formatter it prevents a line-break)
|
693
|
+
#
|
694
|
+
# true => . (green)
|
695
|
+
# false => F (red)
|
696
|
+
# "other" => ? (yellow)
|
697
|
+
#
|
698
|
+
# > .FFF...??...F....F...F..???....F...??
|
699
|
+
```
|
700
|
+
|
701
|
+
### progress(name, perc)
|
702
|
+
```ruby
|
703
|
+
# progress method
|
704
|
+
# severity: debug
|
705
|
+
# prints: colored progress indicator
|
706
|
+
#
|
707
|
+
# > - Progress of Step 0 [ 0%] >-------------------------------------------------
|
708
|
+
# > - Progress of Step 1 [ 40%] ===================>------------------------------
|
709
|
+
#
|
710
|
+
# ________________________________________________ <- 48 chars
|
711
|
+
# 50 chars -> __________________________________________________
|
712
|
+
```
|
713
|
+
|
714
|
+
### _other useful methods_
|
715
|
+
|
716
|
+
- line
|
717
|
+
- print
|
718
|
+
- nl
|
719
|
+
|
720
|
+
-----
|
721
|
+
|
722
|
+
## Docs
|
723
|
+
|
724
|
+
[CHANGELOG](docs/CHANGELOG.md)
|
725
|
+
|
726
|
+
## Contributing
|
727
|
+
|
728
|
+
Bug reports and pull requests are welcome on [GitHub](https://github.com/ruby-smart/simple_logger).
|
729
|
+
This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](docs/CODE_OF_CONDUCT.md).
|
730
|
+
|
731
|
+
## License
|
732
|
+
|
733
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
734
|
+
|
735
|
+
A copy of the [LICENSE](docs/LICENSE.txt) can be found @ the docs.
|
736
|
+
|
737
|
+
## Code of Conduct
|
738
|
+
|
739
|
+
Everyone interacting in the project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [CODE OF CONDUCT](docs/CODE_OF_CONDUCT.md).
|