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 +4 -4
- data/CHANGELOG.md +62 -0
- data/README.md +300 -48
- data/lib/tty/logger.rb +187 -51
- data/lib/tty/logger/config.rb +63 -5
- data/lib/tty/logger/data_filter.rb +118 -0
- data/lib/tty/logger/event.rb +2 -2
- data/lib/tty/logger/formatters/json.rb +3 -4
- data/lib/tty/logger/formatters/text.rb +7 -6
- data/lib/tty/logger/handlers/base.rb +13 -0
- data/lib/tty/logger/handlers/console.rb +37 -14
- data/lib/tty/logger/levels.rb +34 -18
- data/lib/tty/logger/version.rb +3 -3
- metadata +15 -52
- data/Rakefile +0 -8
- data/examples/console.rb +0 -22
- data/examples/error.rb +0 -11
- data/examples/handler.rb +0 -19
- data/examples/output.rb +0 -15
- data/examples/override.rb +0 -29
- data/examples/stream.rb +0 -22
- data/spec/spec_helper.rb +0 -31
- data/spec/unit/add_handler_spec.rb +0 -25
- data/spec/unit/config_spec.rb +0 -107
- data/spec/unit/event_spec.rb +0 -22
- data/spec/unit/exception_spec.rb +0 -45
- data/spec/unit/formatter_spec.rb +0 -70
- data/spec/unit/formatters/json_spec.rb +0 -41
- data/spec/unit/formatters/text_spec.rb +0 -82
- data/spec/unit/handler_spec.rb +0 -83
- data/spec/unit/handlers/custom_spec.rb +0 -26
- data/spec/unit/handlers/null_spec.rb +0 -15
- data/spec/unit/handlers/stream_spec.rb +0 -72
- data/spec/unit/levels_spec.rb +0 -40
- data/spec/unit/log_metadata_spec.rb +0 -55
- data/spec/unit/log_spec.rb +0 -144
- data/spec/unit/output_spec.rb +0 -40
- data/tasks/console.rake +0 -11
- data/tasks/coverage.rake +0 -11
- data/tasks/spec.rake +0 -29
- data/tty-logger.gemspec +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 708549fdd3524759b7404ed40af85915383fbd0be763133ce06b569931dd776b
|
4
|
+
data.tar.gz: 8279b0f105fb3fe7c04e82a129a898f831c48b1b9141d52532f44270ff431d0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2198bb08a4e783e13910e44934c4d4f7a4eb27c5f724f6d0911acb31f54bac546e239ed04565893ca2993a516924ebba2f6d3a2d00b8ad57e35c4c44db69ecd2
|
7
|
+
data.tar.gz: c89656676101aae012ad6d3cc236deb11fc80dc7e5026be7a64c77bb25917d40425085fb3a906b0d61436c69ef4b3e67c7fc4ad178a60718bdc347918e5327ba
|
data/CHANGELOG.md
CHANGED
@@ -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://
|
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
|
-
[![
|
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
|
-
[
|
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
|
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
|
-
|
66
|
-
|
67
|
-
|
68
|
-
* [2.
|
69
|
-
* [2.
|
70
|
-
|
71
|
-
|
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](#
|
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.
|
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](#
|
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
|
-
|
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
|
170
|
+
# ✔ success Dynamically generated info
|
155
171
|
```
|
156
172
|
|
157
|
-
|
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:",
|
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
|
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"
|
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](#
|
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
|
339
|
+
All the configuration options can be changed globally via `configure` or per logger instance.
|
242
340
|
|
243
|
-
* `:
|
244
|
-
* `:
|
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.
|
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](#
|
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.
|
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
|
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
|
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
|
-
|
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
|
-
|
370
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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.
|
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.
|
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.
|
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
|
-
|
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.
|