tty-logger 0.1.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bdcb294c5428dc04d50845cb289e13bd679d78343e3557f7de4423798475c0af
4
- data.tar.gz: 600425284bc08e004523363bdc78ee4a4b8a37b05f0930a2eef4d0b013eb7b38
3
+ metadata.gz: 708549fdd3524759b7404ed40af85915383fbd0be763133ce06b569931dd776b
4
+ data.tar.gz: 8279b0f105fb3fe7c04e82a129a898f831c48b1b9141d52532f44270ff431d0e
5
5
  SHA512:
6
- metadata.gz: 465c8e6fabae9d94f2b884715350ad3bbc1182f132d8e8b504d6b4b62a84669765d05ae60815bc79ffc83749ed43ab67a099f820708f1e1e3c3526b1de470258
7
- data.tar.gz: d583794d9e15390b86138778cf5371a7401f1f1436af4c2fd15162dee2fdef54d9de663a96396915f5fd0c0139b1b42b8b20eda461f013903dcd6c831be6670a
6
+ metadata.gz: 2198bb08a4e783e13910e44934c4d4f7a4eb27c5f724f6d0911acb31f54bac546e239ed04565893ca2993a516924ebba2f6d3a2d00b8ad57e35c4c44db69ecd2
7
+ data.tar.gz: c89656676101aae012ad6d3cc236deb11fc80dc7e5026be7a64c77bb25917d40425085fb3a906b0d61436c69ef4b3e67c7fc4ad178a60718bdc347918e5327ba
@@ -1,7 +1,69 @@
1
1
  # Change log
2
2
 
3
+ ## [v0.6.0] - 2020-12-05
4
+
5
+ ### Added
6
+ * Add :enable_color option to control coloring in the console handler
7
+
8
+ ### Changed
9
+ * Change #add_handler to accept handler configuration options as an extra parameter
10
+
11
+ ### Fixed
12
+ * Fix removing handlers by name or type
13
+
14
+ ## [v0.5.0] - 2020-09-27
15
+
16
+ ### Added
17
+ * Add :message_format option to customize how messages are displayed in the console
18
+ by Josh Greenwood (@JoshTGreenwood)
19
+
20
+ ### Fixed
21
+ * Fix to select event name from valid log types or current level
22
+ by Ryan Schlesinger (@ryansch)
23
+ * Fix duplicate filters attribute definition in TTY::Logger::Config
24
+
25
+ ## [v0.4.0] - 2020-07-29
26
+
27
+ ### Added
28
+ * Allow editing logger configuration at runtime ([#10](https://github.com/piotrmurach/tty-logger/pull/10))
29
+ * Support for the `<<` streaming operator ([#9](https://github.com/piotrmurach/tty-logger/pull/9)))
30
+
31
+ ### Changed
32
+ * Change gemspec to update pastel version and restrict only to minor version
33
+
34
+ ### Fixed
35
+ * Fix to filter sensitive information from exceptions
36
+
37
+ ## [v0.3.0] - 2020-01-01
38
+
39
+ ### Added
40
+ * Add ability to filter sensitive information out of structured data
41
+
42
+ ### Changed
43
+ * Remove the test and task files from the gemspec
44
+
45
+ ### Fixed
46
+ * Fix console handler highlighting of nested hash keys
47
+
48
+ ## [v0.2.0] - 2019-09-30
49
+
50
+ ### Added
51
+ * Add ability to add structured data inside logging block
52
+ * Add ability to filter sensitive data
53
+ * Add ability to define custom log types
54
+ * Add ability to temporarily log at different level
55
+ * Add performance tests
56
+
57
+ ### Changed
58
+ * Change to dynamically define log types
59
+
3
60
  ## [v0.1.0] - 2019-07-21
4
61
 
5
62
  * Initial implementation and release
6
63
 
64
+ [v0.6.0]: https://github.com/piotrmurach/tty-logger/compare/v0.5.0..v0.6.0
65
+ [v0.5.0]: https://github.com/piotrmurach/tty-logger/compare/v0.4.0..v0.5.0
66
+ [v0.4.0]: https://github.com/piotrmurach/tty-logger/compare/v0.3.0..v0.4.0
67
+ [v0.3.0]: https://github.com/piotrmurach/tty-logger/compare/v0.2.0..v0.3.0
68
+ [v0.2.0]: https://github.com/piotrmurach/tty-logger/compare/v0.1.0..v0.2.0
7
69
  [v0.1.0]: https://github.com/piotrmurach/tty-logger/compare/v0.1.0
data/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  <div align="center">
2
- <a href="https://piotrmurach.github.io/tty" target="_blank"><img width="130" src="https://cdn.rawgit.com/piotrmurach/tty/master/images/tty.png" alt="tty logo" /></a>
2
+ <a href="https://ttytoolkit.org" target="_blank"><img width="130" src="https://github.com/piotrmurach/tty/raw/master/images/tty.png" alt="tty logo" /></a>
3
3
  </div>
4
4
 
5
- # TTY::Logger
5
+ # TTY::Logger [![Gitter](https://badges.gitter.im/Join%20Chat.svg)][gitter]
6
6
 
7
7
  [![Gem Version](https://badge.fury.io/rb/tty-logger.svg)][gem]
8
- [![Build Status](https://secure.travis-ci.org/piotrmurach/tty-logger.svg?branch=master)][travis]
8
+ [![Actions CI](https://github.com/piotrmurach/tty-logger/workflows/CI/badge.svg?branch=master)][gh_actions_ci]
9
9
  [![Build status](https://ci.appveyor.com/api/projects/status/vtrkdk0naknnxoog?svg=true)][appveyor]
10
10
  [![Code Climate](https://codeclimate.com/github/piotrmurach/tty-logger/badges/gpa.svg)][codeclimate]
11
11
  [![Coverage Status](https://coveralls.io/repos/github/piotrmurach/tty-logger/badge.svg)][coverage]
@@ -13,7 +13,7 @@
13
13
 
14
14
  [gitter]: https://gitter.im/piotrmurach/tty
15
15
  [gem]: http://badge.fury.io/rb/tty-logger
16
- [travis]: http://travis-ci.org/piotrmurach/tty-logger
16
+ [gh_actions_ci]: https://github.com/piotrmurach/tty-logger/actions?query=workflow%3ACI
17
17
  [appveyor]: https://ci.appveyor.com/project/piotrmurach/tty-logger
18
18
  [codeclimate]: https://codeclimate.com/github/piotrmurach/tty-logger
19
19
  [coverage]: https://coveralls.io/github/piotrmurach/tty-logger
@@ -30,6 +30,8 @@
30
30
  * Intuitive console output for an increased readability
31
31
  * Ability to stream data to any IO object
32
32
  * Supports structured data logging
33
+ * Filters sensitive data
34
+ * Allows to define custom log types
33
35
  * Formats and truncates messages to avoid clogging logging output
34
36
  * Customizable styling of labels and symbols for console output
35
37
  * Includes metadata information: time, location, scope
@@ -40,7 +42,7 @@
40
42
  Add this line to your application's Gemfile:
41
43
 
42
44
  ```ruby
43
- gem 'tty-logger'
45
+ gem "tty-logger"
44
46
  ```
45
47
 
46
48
  And then execute:
@@ -58,17 +60,23 @@ Or install it yourself as:
58
60
  * [2. Synopsis](#2-synopsis)
59
61
  * [2.1 Logging](#21-logging)
60
62
  * [2.1.1 Exceptions](#211-exceptions)
63
+ * [2.1.2 Types](#212-types)
61
64
  * [2.2 Levels](#22-levels)
65
+ * [2.2.1 Scoped Level](#22-scoped-level)
62
66
  * [2.3 Structured Data](#23-structured-data)
63
67
  * [2.4 Configuration](#24-configuration)
64
68
  * [2.4.1 Metadata](#241-metadata)
65
- * [2.5 Handlers](#25-handlers)
66
- * [2.5.1 Console Handler](#251-console-handler)
67
- * [2.5.2 Stream Handler](#252-stream-handler)
68
- * [2.5.3 Custom Handler](#253-custom-handler)
69
- * [2.5.4 Multiple Handlers](#254-multiple-handlers)
70
- * [2.6 Formatters](#26-formatters)
71
- * [2.7 Output streams](#27-output-streams)
69
+ * [2.4.2 Filters](#242-filters)
70
+ * [2.5 Cloning](#25-cloning)
71
+ * [2.6 Handlers](#26-handlers)
72
+ * [2.6.1 Console Handler](#261-console-handler)
73
+ * [2.6.2 Stream Handler](#262-stream-handler)
74
+ * [2.6.3 Custom Handler](#263-custom-handler)
75
+ * [2.6.4 Multiple Handlers](#264-multiple-handlers)
76
+ * [2.7 Formatters](#27-formatters)
77
+ * [2.8 Output streams](#28-output-streams)
78
+ * [3. Community Extensions](#3-community-extensions)
79
+ * [3.1 Sentry Handler](#31-sentry-handler)
72
80
 
73
81
  ## 1. Usage
74
82
 
@@ -78,7 +86,7 @@ Create logger:
78
86
  logger = TTY::Logger.new
79
87
  ```
80
88
 
81
- And log information using any of the logger [types](#21-types):
89
+ And log information using any of the logger [built-in types](#212-types):
82
90
 
83
91
  ```ruby
84
92
  logger.info "Deployed successfully"
@@ -89,7 +97,7 @@ logger.info { "Dynamically generated info" }
89
97
  Include structured data:
90
98
 
91
99
  ```ruby
92
- logger.info "Deployed successfully", myapp: "myapp", env: "prod"
100
+ logger.success "Deployed successfully", myapp: "myapp", env: "prod"
93
101
  # =>
94
102
  # ✔ success Deployed successfully app=myapp env=prod
95
103
  ```
@@ -105,7 +113,7 @@ logger.info "Deployed successfully", myapp: "myapp", env: "prod"
105
113
  # [2019-07-17] [23:21:55.287] › ℹ info Info about the deploy app=myapp env=prod
106
114
  ```
107
115
 
108
- Or change structured data [formatting](#26-formatters) display to `JSON`:
116
+ Or change structured data [formatting](#27-formatters) display to `JSON`:
109
117
 
110
118
  ```ruby
111
119
  logger = TTY::Logger.new do |config|
@@ -148,13 +156,23 @@ logger.success "Deployed", "successfully"
148
156
 
149
157
  You can delay message evaluation by passing it inside a block:
150
158
 
159
+ ```ruby
160
+ logger.success { "Dynamically generated info" }
161
+ # =>
162
+ # ✔ success Dynamically generated info
151
163
  ```
152
- logger.info { "Dynamically generated info" }
164
+
165
+ Similar to regular logging, you cal split your message into chunks inside a block:
166
+
167
+ ```ruby
168
+ logger.success { ["Dynamically", "generated", "info"] }
153
169
  # =>
154
- # ✔ success Deployed successfully
170
+ # ✔ success Dynamically generated info
155
171
  ```
156
172
 
157
- ### 2.1.1 Exceptions
173
+ The above comes handy when paired with [structured data](#23-structured-data).
174
+
175
+ #### 2.1.1 Exceptions
158
176
 
159
177
  You can also report on exceptions.
160
178
 
@@ -164,7 +182,7 @@ For example, let's say you caught an exception about incorrect data format and u
164
182
  begin
165
183
  raise ArgumentError, "Wrong data"
166
184
  rescue => ex
167
- logger.fatal("Error:", error)
185
+ logger.fatal("Error:", ex)
168
186
  end
169
187
  ```
170
188
 
@@ -178,6 +196,51 @@ This will result in a message followed by a full backtrace:
178
196
  # rspec-core-3.8.2/lib/rspec/core/example.rb:257:in `block in run'
179
197
  ```
180
198
 
199
+ #### 2.1.2 Types
200
+
201
+ You can define custom log types via the `types` configuration option:
202
+
203
+ For example, if you want to add `thanks` and `done` log types, you need to provide their names along with logging levels. You can further customise the `:console` output with your desired styling:
204
+
205
+ ```ruby
206
+ logger = TTY::Logger.new do |config|
207
+ config.types = {
208
+ thanks: {level: :info},
209
+ done: {level: :info}
210
+ }
211
+ config.handlers = [
212
+ [:console, {
213
+ styles: {
214
+ thanks: {
215
+ symbol: "❤️ ",
216
+ label: "thanks",
217
+ color: :magenta,
218
+ levelpad: 0
219
+ },
220
+ done: {
221
+ symbol: "!!",
222
+ label: "done",
223
+ color: :green,
224
+ levelpad: 2
225
+ }
226
+ }
227
+ }]
228
+ ]
229
+ end
230
+ ```
231
+
232
+ Once defined, you can call new log types:
233
+
234
+ ```ruby
235
+ logger.thanks("Great work!")
236
+ logger.done("Work done!")
237
+ # =>
238
+ # ❤️ thanks Great work!
239
+ # !! done Work done!
240
+ ```
241
+
242
+ ![](assets/tty-logger-custom-log-types.png)
243
+
181
244
  ### 2.2 Levels
182
245
 
183
246
  The supported levels, ordered by precedence, are:
@@ -192,17 +255,17 @@ So the order is: `:debug` < `:info` < `:warn` < `:error` < `:fatal`
192
255
 
193
256
  For example, `:info` takes precedence over `:debug`. If your log level is set to `:info`, `:info`, `:warn`, `:error` and `:fatal` will be printed to the console. If your log level is set to `:warn`, only `:warn`, `:error` and `:fatal` will be printed.
194
257
 
195
- You can set level using the `level` configuration option. The value can be a symbol, a string or level constant. For example, `:info`, `INFO` or `TTY::Logger::INFO_LEVEL` will quality as valid level value.
258
+ You can set level using the `level` configuration option. The value can be a symbol, a string or level constant. For example, `:info`, `INFO` or `TTY::Logger::INFO_LEVEL` will qualify as valid level value.
196
259
 
197
260
  ```ruby
198
261
  TTY::Logger.new do |config|
199
- config.level = :info # or "INFO" / TTY::Logger::INFO_LEVEL
262
+ config.level = :info # or "INFO" or TTY::Logger::INFO_LEVEL
200
263
  end
201
264
  ```
202
265
 
203
266
  Or you can specific level for each log events handler.
204
267
 
205
- For example, to log messages above info level to a stream and only error level events to the console do:
268
+ For example, to log messages above `:info` level to a stream and only `:error` level events to the console do:
206
269
 
207
270
  ```ruby
208
271
  logger = TTY::Logger.new do |config|
@@ -213,7 +276,34 @@ logger = TTY::Logger.new do |config|
213
276
  end
214
277
  ```
215
278
 
216
- You can also change the [output streams](#27-output-streams) for each handler.
279
+ You can also change the [output streams](#28-output-streams) for each handler.
280
+
281
+ #### 2.2.1 Scoped Level
282
+
283
+ You can temporarily change level, raise it or lower it by using the `log_at` call. By default messages are logged at `:info` level, but you can change this for the duration of a block:
284
+
285
+ ```ruby
286
+ logger = TTY::Logger.new
287
+
288
+ logger.info("not logged")
289
+
290
+ logger.log_at :debug do
291
+ logger.debug("logged")
292
+ end
293
+ # =>
294
+ # • debug logged
295
+ ```
296
+
297
+ Or elevate a level to an error with a constant `ERROR_LEVEL`:
298
+
299
+ ```ruby
300
+ logger.log_at TTY::Logger::ERROR_LEVEL do
301
+ logger.debug("not logged")
302
+ logger.error("logged")
303
+ end
304
+ # =>
305
+ # ⨯ error logged
306
+ ```
217
307
 
218
308
  ### 2.3 Structured data
219
309
 
@@ -236,16 +326,28 @@ logger.wait "Ready to deploy", app: "myapp", env: "prod"
236
326
  # … waiting Ready to deploy app=myapp env=prod
237
327
  ```
238
328
 
329
+ You can delay data evaluation until it's evaluated by passing it inside a block:
330
+
331
+ ```ruby
332
+ logger.wait { ["Ready to deploy", {app: "myapp", env: "prod"}] }
333
+ # =>
334
+ # … waiting Ready to deploy app=myapp env=prod
335
+ ```
336
+
239
337
  ### 2.4 Configuration
240
338
 
241
- All the configuration options can be changed globally via `configure` or per logger instance via object initialization.
339
+ All the configuration options can be changed globally via `configure` or per logger instance.
242
340
 
243
- * `:formatter` - the formatter used to display structured data. Defaults to `:text`. see [Formatters](#26-formatters) for more details.
244
- * `:handlers` - the handlers used to log messages. Defaults to `[:console]`. See [Handlers](#25-handlers) for more details.
341
+ * `:filters` - the storage of placeholders to filter sensitive data out from the logs. Defaults to `{}`.
342
+ * `:formatter` - the formatter used to display structured data. Defaults to `:text`. See [Formatters](#27-formatters) for more details.
343
+ * `:handlers` - the handlers used to log messages. Defaults to `[:console]`. See [Handlers](#26-handlers) for more details.
245
344
  * `:level` - the logging level. Any message logged below this level will be simply ignored. Each handler may have it's own default level. Defaults to `:info`
246
345
  * `:max_bytes` - the maximum message size to be logged in bytes. Defaults to `8192` bytes. The truncated message will have `...` at the end.
247
346
  * `:max_depth` - the maximum depth for nested structured data. Defaults to `3`.
248
347
  * `:metadata` - the meta info to display before the message, can be `:pid`, `:date`, `:time` or `:file`. Defaults to empty array `[]`, no metadata. Setting this to `:all` will print all the metadata.
348
+ * `:types` - the new custom log types. Defaults to `{}`.
349
+ * `:date_format` - uses `strftime` format to display dates. Defaults to `"%F"`.
350
+ * `:time_format` - uses `strftime` format to display times. Defaults to `"%T.%3N"`.
249
351
 
250
352
  For example, to configure `:max_bytes`, `:level` and `:metadata` for all logger instances do:
251
353
 
@@ -266,6 +368,14 @@ logger = TTY::Logger.new do |config|
266
368
  end
267
369
  ```
268
370
 
371
+ You can also change the logger's configuration at runtime:
372
+
373
+ ```ruby
374
+ logger.configure do |config|
375
+ config.level = :debug
376
+ end
377
+ ```
378
+
269
379
  ### 2.4.1 Metadata
270
380
 
271
381
  The `:metdata` configuration option can include the following symbols:
@@ -275,7 +385,130 @@ The `:metdata` configuration option can include the following symbols:
275
385
  * `:time` - the log event time
276
386
  * `:file` - the file with a line number the log event is triggered from
277
387
 
278
- ### 2.5 Handlers
388
+ ### 2.4.2 Filters
389
+
390
+ You can filter sensitive data out of log output with `filters` configuration option. The `filters` can be further configured to remove info from log message with `message` or structured data with `data`. Both methods, as a value accept a list of sensitive items to search for.
391
+
392
+ If you want to filter sensitive information from log messages use `message`:
393
+
394
+ ```ruby
395
+ logger = TTY::Logger.new(output: output) do |config|
396
+ config.filters.message = %w[secret password]
397
+ end
398
+ ```
399
+
400
+ Which by default will replace each matching string with `[FILTERED]` placeholder:
401
+
402
+ ```ruby
403
+ logger.info("Super secret info with password")
404
+ # =>
405
+ # ℹ info Super [FILTERED] info with [FILTERED]
406
+ ```
407
+
408
+ You can also replace each data item with a custom placeholder. To do so use a `:mask` keyword with a replacement placeholder.
409
+
410
+ For example, to replace "secret" content with placeholder `"<SECRET>"` do:
411
+
412
+ ```ruby
413
+ logger = TTY::Logger.new do |config|
414
+ config.filters.message = %w[secret]
415
+ config.filters.mask = "<SECRET>"
416
+ end
417
+ ```
418
+
419
+ When logged, it will produce:
420
+
421
+ ```ruby
422
+ logger.info("Super secret info")
423
+ # =>
424
+ # ℹ info Super <SECRET> info
425
+ ```
426
+
427
+ To filter out sensitive information out of structured data use `data` method. By default any value matching a parameter name will be filtered regardless of the level of nesting. If you wish to filter only a specific deeply nested key use a dot notation like `params.card.password` to only filter `{params: {card: {password: "Secret123"}}}`.
428
+
429
+ For example to filter out a `:password` from data do:
430
+
431
+ ```ruby
432
+ logger = TTY::Logger.new do |config|
433
+ config.filters.data = %i[password]
434
+ end
435
+ ```
436
+
437
+ This will filter out any key matching password:
438
+
439
+ ```ruby
440
+ logger.info("Secret info", password: "Secret123", email: "")
441
+ # =>
442
+ # ℹ info Secret info password="[FILTERED]" email="secret@example.com"
443
+ ```
444
+
445
+ But also any nested data item:
446
+
447
+ ```ruby
448
+ logger.info("Secret info", params: {password: "Secret123", email: ""})
449
+ # =>
450
+ # ℹ info Secret info params={password="[FILTERED]" email="secret@example.com"}
451
+ ```
452
+
453
+ You're not limited to using only direct string comparison. You can also match based on regular expressions. For example, to match keys starting with `ba` we can add a following filter:
454
+
455
+ ```ruby
456
+ logger = TTY::Logger.new do |config|
457
+ config.filters.data = [/ba/]
458
+ end
459
+ ```
460
+
461
+ Then appropriate values will be masked:
462
+
463
+ ```ruby
464
+ logger.info("Filtering data", {"foo" => {"bar" => "val", "baz" => "val"}})
465
+ # =>
466
+ # ℹ info Filtering data foo={bar="[FILTERED]" baz="[FILTERED]"}
467
+ ```
468
+
469
+ You can mix and match. To filter keys based on pattern inside a deeply nested hash use dot notation with regular expression. For example, to find keys for the `:foo` parent key that starts with `:b` character, we could do:
470
+
471
+ ```ruby
472
+ logger = TTY::Logger.new do |config|
473
+ config.filters.data = [/^foo\.b/]
474
+ end
475
+ ```
476
+
477
+ Then only keys under the `:foo` key will be filtered:
478
+
479
+ ```ruby
480
+ logger.info("Filtering data", {"foo" => {"bar" => "val"}, "baz" => {"bar" => val"}})
481
+ # =>
482
+ # ℹ info Filtering data foo={bar="[FILTERED]"} baz={bar=val}
483
+ ```
484
+
485
+ ### 2.5 Cloning
486
+
487
+ You can create a copy of a logger with the current configuration using the `copy` method.
488
+
489
+ For example, given the following logger with `:app` and `:env` data:
490
+
491
+ ```ruby
492
+ logger = TTY::Logger.new(fields: {app: "parent", env: "prod"})
493
+ ```
494
+
495
+ We can create a copy with a custom configuration that changes filtered message content and `:app` data:
496
+
497
+ ```ruby
498
+ child_logger = logger.copy(app: "child") do |config|
499
+ config.filters = ["logging"]
500
+ end
501
+ ```
502
+
503
+ ```ruby
504
+ logger.info("Parent logging")
505
+ child_logger.warn("Child logging")
506
+ # =>
507
+ # ℹ info Parent logging app=parent env=prod
508
+ # ⚠ warning Child [FILTERED] app=child env=prod
509
+ ```
510
+
511
+ ### 2.6 Handlers
279
512
 
280
513
  `TTY::Logger` supports many ways to handle log messages.
281
514
 
@@ -285,7 +518,7 @@ The available handlers by default are:
285
518
  * `:null` - discards any log messages
286
519
  * `:stream` - log messages to an `IO` stream, a file, a socket or a console.
287
520
 
288
- You can also implement your own [custom handler](#253-custom-handler).
521
+ You can also implement your own [custom handler](#263-custom-handler).
289
522
 
290
523
  The handlers can be configured via global or instance configuration with `handlers`. The handler can be a name or a class name:
291
524
 
@@ -311,13 +544,16 @@ logger.add_handler(:console)
311
544
  logger.remove_handler(:console)
312
545
  ```
313
546
 
314
- #### 2.5.1 Console handler
547
+ #### 2.6.1 Console Handler
315
548
 
316
549
  The console handler prints log messages to the console. It supports the following options:
317
550
 
318
551
  * `:styles` - a hash of styling options.
319
- * `:formatter` - the formatter for log messages. Defaults to `:text`
320
- * `:output` - the device to log error messages to. Defaults to `$stderr`
552
+ * `:formatter` - the formatter for log messages. Defaults to `:text`.
553
+ * `:output` - the device to log error messages to. Defaults to `$stderr`.
554
+ * `:message_format` - uses `sprintf` format to display messages. Defaults to `"%-25s"`.
555
+ * `:enable_color` - when `true` forces colored output, when `false` disables colored output.
556
+ Defaults to `nil` which performs automatic terminal color support detection.
321
557
 
322
558
  The supported options in the `:styles` are:
323
559
 
@@ -326,9 +562,9 @@ The supported options in the `:styles` are:
326
562
  * `:color` - the color for the log message.
327
563
  * `:levelpad` - the extra amount of padding used to display log label.
328
564
 
329
- See the [TTY::Logger::Handlers::Console]() for full list of styles.
565
+ See the [TTY::Logger::Handlers::Console](https://github.com/piotrmurach/tty-logger/blob/master/lib/tty/logger/handlers/console.rb) for full list of styles.
330
566
 
331
- Console handler has many defaults styles such as `success` and `error`:
567
+ Console handler has many default styles such as `success` and `error`:
332
568
 
333
569
  ```ruby
334
570
  logger = TTY::Logger.new
@@ -339,7 +575,7 @@ logger.error("Default error")
339
575
  # ⨯ error Default error
340
576
  ```
341
577
 
342
- You can change console handler default style with a tuple of handler name and options hash.
578
+ You can change the default styling with a tuple of handler name and options hash.
343
579
 
344
580
  In our example, we want to change the styling of `success` and `error`:
345
581
 
@@ -353,7 +589,7 @@ new_styles = {
353
589
  error: {
354
590
  symbol: "!",
355
591
  label: "Dooh",
356
- levelpad: 3
592
+ levelpad: 3 # the amount of extra padding to align level names in a column
357
593
  }
358
594
  }
359
595
  }
@@ -362,18 +598,27 @@ new_styles = {
362
598
  And then use the `new_styles` when providing `handlers` configuration:
363
599
 
364
600
  ```ruby
365
- new_style = TTY::Logger.new do |config|
366
- config.handlers = [:console, new_styles]
601
+ styled_logger = TTY::Logger.new do |config|
602
+ config.handlers = [[:console, new_styles]]
367
603
  end
368
604
 
369
- new_style.success("Custom success")
370
- new_style.error("Custom error")
605
+ styled_logger.success("Custom success")
606
+ styled_logger.error("Custom error")
371
607
  # =>
372
- + Ohh yes Custom success
373
- ! Dooh Custom error
608
+ # + Ohh yes Custom success
609
+ # ! Dooh Custom error
374
610
  ```
375
611
 
376
- #### 2.5.2 Stream handler
612
+ To increase message padding to a percentage of terminal width (depends on [tty-screen](https://github.com/piotrmurach/tty-screen/)):
613
+
614
+ ```ruby
615
+ TTY::Logger.new do |config|
616
+ padding = (TTY::Screen.columns * 0.4).to_i
617
+ config.handlers = [[:console, { message_format: "%-#{padding}s" }]]
618
+ end
619
+ ```
620
+
621
+ #### 2.6.2 Stream handler
377
622
 
378
623
  To send log event data outside of console to another service or `IO` stream, you can use `:stream` handler.
379
624
 
@@ -387,7 +632,7 @@ end
387
632
  By default, the output will be a plain text streamed to console. The text contains key and value pairs of all the metadata and the message of the log event.
388
633
 
389
634
  ```ruby
390
- loggger.info("Info about the deploy", app="myap", env="prod")
635
+ logger.info("Info about the deploy", app:"myap", env:"prod")
391
636
  # =>
392
637
  # pid=18315 date="2019-07-21" time="15:42:12.463" path="examples/stream.rb:17:in`<main>`"
393
638
  # level=info message="Info about the deploy" app=myapp env=prod
@@ -405,13 +650,13 @@ end
405
650
  This will output JSON formatted text streamed to console.
406
651
 
407
652
  ```ruby
408
- loggger.info("Info about the deploy", app="myap", env="prod")
653
+ logger.info("Info about the deploy", app="myap", env="prod")
409
654
  # =>
410
655
  # {"pid":18513,"date":"2019-07-21","time":"15:54:09.924","path":"examples/stream.rb:17:in`<main>`",
411
656
  # "level":"info","message":"Info about the deploy","app":"myapp","env":"prod"}
412
657
  ```
413
658
 
414
- #### 2.5.3 Custom Handler
659
+ #### 2.6.3 Custom Handler
415
660
 
416
661
  You can create your own log event handler if the default ones don't match your needs.
417
662
 
@@ -471,7 +716,7 @@ logger = TTY::Logger.new
471
716
  logger.add_handler [MyHandler, label: "myhandler"]
472
717
  ```
473
718
 
474
- #### 2.5.4 Multiple Handlers
719
+ #### 2.6.4 Multiple Handlers
475
720
 
476
721
  You can define as many handlers as you need. For example, you may log messages both to console and stream:
477
722
 
@@ -492,7 +737,7 @@ logger = TTY::Logger.new do |config|
492
737
  end
493
738
  ```
494
739
 
495
- ### 2.6 Formatters
740
+ ### 2.7 Formatters
496
741
 
497
742
  The available formatters are:
498
743
 
@@ -514,7 +759,8 @@ TTY::Logger.new do |config|
514
759
  config.handlers = [:console, [:console, formatter: :json]]
515
760
  end
516
761
  ```
517
- ### 2.7 Output Streams
762
+
763
+ ### 2.8 Output Streams
518
764
 
519
765
  By default all log events are output to `stderr`. You can change this using configuration `output` option. Any `IO`-like stream such as file, socket or console can be used. For example, to log all messages to a file do:
520
766
 
@@ -543,6 +789,12 @@ logger = TTY::Logger.new do |config|
543
789
  end
544
790
  ```
545
791
 
792
+ ## 3. Community Extensions
793
+
794
+ ### 3.1 Sentry Handler
795
+
796
+ [tty-logger-raven](https://github.com/ianks/tty-logger-raven) provides an extension for Sentry.io.
797
+
546
798
  ## Development
547
799
 
548
800
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.