debug_logging 4.0.1 → 4.0.3

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 (43) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +237 -69
  4. data/CITATION.cff +20 -0
  5. data/CODE_OF_CONDUCT.md +79 -29
  6. data/CONTRIBUTING.md +242 -33
  7. data/FUNDING.md +74 -0
  8. data/LICENSE.md +12 -0
  9. data/README.md +491 -198
  10. data/RUBOCOP.md +71 -0
  11. data/SECURITY.md +15 -10
  12. data/certs/pboling.pem +27 -0
  13. data/lib/debug_logging/argument_printer.rb +34 -13
  14. data/lib/debug_logging/class_logger.rb +26 -56
  15. data/lib/debug_logging/class_notifier.rb +22 -38
  16. data/lib/debug_logging/colorized_string.rb +130 -0
  17. data/lib/debug_logging/configuration.rb +3 -2
  18. data/lib/debug_logging/finalize.rb +10 -8
  19. data/lib/debug_logging/hooks.rb +7 -5
  20. data/lib/debug_logging/instance_logger.rb +8 -2
  21. data/lib/debug_logging/instance_logger_modulizer.rb +19 -49
  22. data/lib/debug_logging/instance_notifier.rb +6 -0
  23. data/lib/debug_logging/instance_notifier_modulizer.rb +15 -31
  24. data/lib/debug_logging/lamb_dart/base.rb +46 -0
  25. data/lib/debug_logging/lamb_dart/log.rb +47 -0
  26. data/lib/debug_logging/lamb_dart/note.rb +30 -0
  27. data/lib/debug_logging/lamb_dart.rb +9 -0
  28. data/lib/debug_logging/lamb_dartable.rb +41 -0
  29. data/lib/debug_logging/lamb_darts/benchmarked.rb +19 -0
  30. data/lib/debug_logging/lamb_darts/enter_log.rb +16 -0
  31. data/lib/debug_logging/lamb_darts/error_handle.rb +28 -0
  32. data/lib/debug_logging/lamb_darts/exit_log.rb +15 -0
  33. data/lib/debug_logging/lamb_darts/notify.rb +17 -0
  34. data/lib/debug_logging/log_subscriber.rb +33 -26
  35. data/lib/debug_logging/util.rb +23 -19
  36. data/lib/debug_logging/version.rb +4 -1
  37. data/lib/debug_logging.rb +14 -9
  38. data/lib/simple_debug_logging.rb +18 -16
  39. data/sig/debug_logging/version.rbs +6 -0
  40. data.tar.gz.sig +0 -0
  41. metadata +129 -141
  42. metadata.gz.sig +0 -0
  43. data/LICENSE.txt +0 -21
data/README.md CHANGED
@@ -1,123 +1,117 @@
1
- # DebugLogging
1
+ [![Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0][🖼️galtzo-floss-i]][🖼️galtzo-floss] [![ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5][🖼️ruby-lang-i]][🖼️ruby-lang]
2
2
 
3
- <div id="badges">
3
+ [🖼️galtzo-floss-i]: https://logos.galtzo.com/assets/images/galtzo-floss/avatar-192px.svg
4
+ [🖼️galtzo-floss]: https://discord.gg/3qme4XHNKN
5
+ [🖼️ruby-lang-i]: https://logos.galtzo.com/assets/images/ruby-lang/avatar-192px.svg
6
+ [🖼️ruby-lang]: https://www.ruby-lang.org/
4
7
 
5
- [![CI Build][🚎dl-cwfi]][🚎dl-cwf]
6
- [![Test Coverage][🔑cc-covi]][🔑cc-cov]
7
- [![Maintainability][🔑cc-mnti]][🔑cc-mnt]
8
- [![Depfu][🔑depfui]][🔑depfu]
8
+ # 🪲 DebugLogging
9
9
 
10
- -----
10
+ [![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![CodeQL][🖐codeQL-img]][🖐codeQL] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]
11
11
 
12
- [![Liberapay Patrons][⛳liberapay-img]][⛳liberapay]
13
- [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor]
14
- <span class="badge-buymeacoffee">
15
- <a href="https://ko-fi.com/O5O86SNP4" target='_blank' title="Donate to my FLOSS or refugee efforts at ko-fi.com"><img src="https://img.shields.io/badge/buy%20me%20coffee-donate-yellow.svg" alt="Buy me coffee donation button" /></a>
16
- </span>
17
- <span class="badge-patreon">
18
- <a href="https://patreon.com/galtzo" title="Donate to my FLOSS or refugee efforts using Patreon"><img src="https://img.shields.io/badge/patreon-donate-yellow.svg" alt="Patreon donate button" /></a>
19
- </span>
12
+ `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][🖼️galtzo-floss], as I may have missed the [discord notification][🖼️galtzo-floss].
20
13
 
21
- </div>
14
+ ---
22
15
 
23
- [⛳liberapay-img]: https://img.shields.io/liberapay/patrons/pboling.svg?logo=liberapay
24
- [⛳liberapay]: https://liberapay.com/pboling/donate
25
- [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
26
- [🖇sponsor]: https://github.com/sponsors/pboling
16
+ `if ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.
27
17
 
18
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
28
19
 
29
- Unobtrusive, inheritable-overridable-configurable, drop-in debug logging, instrumented via method decorators.
30
- Don't leave a mess behind when it is time to remove logging!
31
- Supports `ActiveSupport::Notifications` (thanks [@jgillson](https://github.com/jgillson)). Optional ActiveRecord callback-style hooks that you can decorate your methods with. Hooks logic was taken from the [`slippy_method_hooks` gem](https://github.com/guckin/slippy_method_hooks), (thanks [@guckin](https://github.com/guckin)), and prefaced with `debug_` for this implementation. `DebugLogging::Finalize` is lightly modified from [this stackoverflow answer](https://stackoverflow.com/a/34559282).
20
+ <details>
21
+ <summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
32
22
 
33
- ## What do I mean by "unobtrusive"?
23
+ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
34
24
 
35
- **Ugly** debug logging is added inside the body of a method, so it runs when a method is called. This can create a mess of your git history, and can even introduce new bugs to your code. Don't `puts` all over your codebase... Instead use this gem.
25
+ </details>
36
26
 
37
- **Unobtrusive** debug logging stays out of the method, changes no logic, can't break your code, and yet it still runs when your method is called, and tells you everything you wanted to know. It doesn't mess with the git history of the method at all!
27
+ ## 🌻 Synopsis
38
28
 
39
- | Project | DebugLogging |
40
- |------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
41
- | install | `bundle add debug_logging` |
42
- | compatibility | Ruby >= 3.1 (use version 3.x for Ruby 2.4 - 2.7 compatibility) |
43
- | license | [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) |
44
- | download rank | [![Downloads Today](https://img.shields.io/gem/rd/debug_logging.svg)](https://github.com/pboling/debug_logging) |
45
- | version | [![Version](https://img.shields.io/gem/v/debug_logging.svg)](https://rubygems.org/gems/debug_logging) |
46
- | code triage | [![Open Source Helpers](https://www.codetriage.com/pboling/debug_logging/badges/users.svg)](https://www.codetriage.com/pboling/debug_logging) |
47
- | documentation | [on RDoc.info][documentation] |
48
- | live chat | [![Join the chat at https://gitter.im/pboling/debug_logging](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/pboling/debug_logging?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) |
49
- | expert support | [![Get help on Codementor](https://cdn.codementor.io/badges/get_help_github.svg)](https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github) |
50
- | Spread ~♡ⓛⓞⓥⓔ♡~ | [🌏](https://about.me/peter.boling), [👼](https://angel.co/peter-boling), [![Liberapay Patrons][⛳liberapay-img]][⛳liberapay] [![Follow Me on LinkedIn][🖇linkedin-img]][🖇linkedin] [![Find Me on WellFound:][✌️wellfound-img]][✌️wellfound] [![My Blog][🚎blog-img]][🚎blog] [![Follow Me on Twitter][🐦twitter-img]][🐦twitter] |
29
+ ## 💡 Info you can shake a stick at
51
30
 
52
- [🚎dl-cwf]: https://github.com/pboling/debug_logging/actions/workflows/current.yml
53
- [🚎dl-cwfi]: https://github.com/pboling/debug_logging/actions/workflows/current.yml/badge.svg
31
+ | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
32
+ |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
33
+ | Works with JRuby | [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎jruby-9.4-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
34
+ | Works with Truffle Ruby | [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] <br/> [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf]|
35
+ | Works with MRI Ruby 4 | [![Ruby 4.0 Compat][💎ruby-4.0i]][🚎11-c-wf] [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
36
+ | Works with MRI Ruby 3 | [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎ruby-3.1-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎ruby-3.2-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎ruby-3.3-wf] [![Ruby 3.4 Compat][💎ruby-3.4i]][🚎ruby-3.4-wf]|
37
+ | Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
38
+ | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
39
+ | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
40
+ | Compliance | [![License: MIT][📄license-img]][📄license] [![Apache license compatibility: Category A][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
41
+ | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
42
+ | Maintainer 🎖️ | [![Follow Me on LinkedIn][💖🖇linkedin-img]][💖🖇linkedin] [![Follow Me on Ruby.Social][💖🐘ruby-mast-img]][💖🐘ruby-mast] [![Follow Me on Bluesky][💖🦋bluesky-img]][💖🦋bluesky] [![Contact Maintainer][🚂maint-contact-img]][🚂maint-contact] [![My technical writing][💖💁🏼‍♂️devto-img]][💖💁🏼‍♂️devto] |
43
+ | `...` 💖 | [![Find Me on WellFound:][💖✌️wellfound-img]][💖✌️wellfound] [![Find Me on CrunchBase][💖💲crunchbase-img]][💖💲crunchbase] [![My LinkTree][💖🌳linktree-img]][💖🌳linktree] [![More About Me][💖💁🏼‍♂️aboutme-img]][💖💁🏼‍♂️aboutme] [🧊][💖🧊berg] [🐙][💖🐙hub] [🛖][💖🛖hut] [🧪][💖🧪lab] |
54
44
 
55
- [⛳liberapay-img]: https://img.shields.io/liberapay/patrons/pboling.svg?logo=liberapay
56
- [⛳liberapay]: https://liberapay.com/pboling/donate
57
- [🖇linkedin]: http://www.linkedin.com/in/peterboling
58
- [🖇linkedin-img]: https://img.shields.io/badge/PeterBoling-blue?style=plastic&logo=linkedin
59
- [✌️wellfound]: https://angel.co/u/peter-boling
60
- [✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=plastic&logo=angellist
61
- [🐦twitter]: http://twitter.com/intent/user?screen_name=galtzo
62
- [🐦twitter-img]: https://img.shields.io/twitter/follow/galtzo.svg?style=social&label=Follow%20@galtzo
63
- [🚎blog]: http://www.railsbling.com/tags/oauth2/
64
- [🚎blog-img]: https://img.shields.io/badge/blog-railsbling-brightgreen.svg?style=flat
65
- [my🧪lab]: https://gitlab.com/pboling
66
- [my🧊berg]: https://codeberg.org/pboling
67
- [my🛖hut]: https://sr.ht/~galtzo/
68
-
69
- ### Gives you (all are optional):
70
-
71
- * *benchmarking*
72
- * *colorization by class/method*
73
- * *robust argument printer with customizable ellipsis*
74
- * *unique invocation identifiers*
75
- * *simple single line global config, or per class/instance/method config*
76
- * *separate loggers, if needed*
77
- * *log method calls, also when exit scope*
78
- * *Prevents heavy computation of strings with `logger.debug { 'log me' }` block format, since v1.0.12*
79
- * *ActiveSupport::Notifications integration for instrumenting/logging events on class and instance methods, since v3.1.3*
80
- * *Optional instance, and class-instance, variable logging, since v3.1.3*
81
- * *ActiveRecord style callback-hooks (optional: `require 'debug_logging/hooks'` and `include DebugLogging::Hooks`), since v3.1.3*
82
- * *All configuration is inheritable to, and overridable by, child classes, since v3.1.3*
83
- * *[Class finalization hook](https://stackoverflow.com/a/34559282) (optional: `require 'debug_logging/finalize'` and `extend DebugLogging::Finalize`), since v3.1.3*
84
- * *Error handling hooks you can use to log problems when they happen, since v3.1.7*
85
- * **so many free ponies** 🎠🐴🎠🐴🎠🐴
86
-
87
- ## Next Level Magic
88
-
89
- Herein you will find:
90
-
91
- * ~~Classes inheriting from Module~~ Refactored to use standard Modules and `prepend`!
92
- * Zero tolerance policy on monkey patching
93
- * When the gem is loaded there are no monkey patches.
94
- * Rather, your own classes/methods get "patched" and "hooked" as you configure them.
95
- * 100% clean, 0% obtrusive
96
- * Greater than 94% test coverage & 82% branch coverage
97
- * 100% Ruby 2.1+ compatible
98
- - use version `gem "debug_logging", "~> 1.0"` for Ruby < 2.3
99
- - use version `gem "debug_logging", "~> 2.0"` for Ruby 2.3
100
- - use version `gem "debug_logging", "~> 3.1"` for Ruby >= 2.4, < 3
101
- - apologies to Ruby 3.0, which is hiding under a blanket
102
- - use version `gem "debug_logging", "~> 4.0"` for Ruby >= 3.1
103
-
104
- ## Installation
105
-
106
- Add this line to your application's Gemfile:
45
+ ### Compatibility
107
46
 
108
- ```ruby
109
- gem "debug_logging", "~> 4.0"
110
- ```
47
+ Compatible with MRI Ruby 3.1+, and concordant releases of JRuby, and TruffleRuby.
48
+ CI workflows and Appraisals are generated for MRI Ruby 3.1+.
49
+ This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
50
+ may be higher than the gem's runtime compatibility floor when legacy Rubies are
51
+ not practical for the current toolchain.
52
+
53
+ | 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 and the color 💚 green 💚 |
54
+ |------------------------------------------------|--------------------------------------------------------|
55
+ | 👟 Check it out! | ✨ [github.com/appraisal-rb/appraisal2][💎appraisal2] ✨ |
56
+
57
+
58
+
59
+ ### Federated DVCS
60
+
61
+ <details markdown="1">
62
+ <summary>Find this repo on federated forges (Coming soon!)</summary>
63
+
64
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
65
+ |-------------------------------------------------|-----------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
66
+ | 🧪 [galtzo-floss/debug_logging on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix | ➖ |
67
+ | 🧊 [galtzo-floss/debug_logging on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
68
+ | 🐙 [galtzo-floss/debug_logging on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix | [💚][gh-discussions] |
69
+ | 🎮️ [Discord Server][✉️discord-invite] | [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] | [Let's][✉️discord-invite] | [talk][✉️discord-invite] | [about][✉️discord-invite] | [this][✉️discord-invite] | [library!][✉️discord-invite] |
70
+
71
+ </details>
111
72
 
112
- And then execute:
73
+ [gh-discussions]: https://github.com/galtzo-floss/debug_logging/discussions
74
+
75
+ ### Enterprise Support [![Tidelift](https://tidelift.com/badges/package/rubygems/debug_logging)](https://tidelift.com/subscription/pkg/rubygems-debug_logging?utm_source=rubygems-debug_logging&utm_medium=referral&utm_campaign=readme)
76
+
77
+ Available as part of the Tidelift Subscription.
78
+
79
+ <details markdown="1">
80
+ <summary>Need enterprise-level guarantees?</summary>
81
+
82
+ The maintainers of this and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use.
83
+
84
+ [![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]
85
+
86
+ - 💡Subscribe for support guarantees covering _all_ your FLOSS dependencies
87
+ - 💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]
88
+ - 💡Tidelift pays maintainers to maintain the software you depend on!<br/>📊`@`Pointy Haired Boss: An [enterprise support][🏙️entsup-tidelift] subscription is "[never gonna let you down][🧮kloc]", and *supports* open source maintainers
89
+
90
+ Alternatively:
91
+
92
+ - [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
93
+ - [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
94
+ - [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
95
+
96
+ </details>
97
+
98
+ ## ✨ Installation
99
+
100
+ Install the gem and add to the application's Gemfile by executing:
101
+
102
+ ```console
103
+ bundle add debug_logging
104
+ ```
113
105
 
114
- $ bundle
106
+ If bundler is not being used to manage dependencies, install the gem by executing:
115
107
 
116
- Or install it yourself as:
108
+ ```console
109
+ gem install debug_logging
110
+ ```
117
111
 
118
- $ gem install debug_logging
112
+ ## ⚙️ Configuration
119
113
 
120
- ## Usage
114
+ ## 🔧 Basic Usage
121
115
 
122
116
  Crack open the specs for more complex usage examples than the ones below.
123
117
 
@@ -166,7 +160,7 @@ DebugLogging.configuration.ellipsis = " ✂️ …".freeze
166
160
  DebugLogging.configuration.mark_scope_exit = true # Only has an effect if benchmarking is off, since benchmarking always marks the scope exit
167
161
  DebugLogging.configuration.add_payload = false # or a proc which will be called to print the payload
168
162
  DebugLogging.configuration.payload_max_length = 1000
169
- DebugLogging.configuration.error_handler_proc = nil # e.g. ->(error, config, obj, method_name, args) { config.log { "#{error.class}: #{error.message} in #{method_name}\nargs: #{args.inspect}" } }
163
+ DebugLogging.configuration.error_handler_proc = nil # e.g. ->(error, config, obj, method_name, *args, **kwargs) { config.log { "#{error.class}: #{error.message} in #{method_name}\nargs: #{args.inspect}" } }
170
164
  ```
171
165
 
172
166
  If you prefer to use the block style:
@@ -192,7 +186,7 @@ DebugLogging.configure do |config|
192
186
  config.mark_scope_exit = true # Only has an effect if benchmarking is off, since benchmarking always marks the scope exit
193
187
  config.add_payload = false # or a proc which will be called to print the payload
194
188
  config.payload_max_length = 1000
195
- config.error_handler_proc = nil # e.g. ->(error, config, obj, method_name, args) { config.log { "#{error.class}: #{error.message} in #{method_name}\nargs: #{args.inspect}" } }
189
+ config.error_handler_proc = nil # e.g. ->(error, config, obj, method_name, *args, **kwargs) { config.log { "#{error.class}: #{error.message} in #{method_name}\nargs: #{args.inspect}" } }
196
190
  end
197
191
  ```
198
192
 
@@ -241,20 +235,28 @@ class Car
241
235
  # == BEGIN CLASS METHODS ==
242
236
  # For class methods:
243
237
  # Option 1: Use *logged* as a method decorator
244
- logged def self.make
245
- new
246
- end
247
- def self.design(*_args)
248
- new
249
- end
250
-
251
- def self.safety(*_args)
252
- new
253
- end
254
-
255
- def self.dealer_options(*_args)
256
- new
238
+ class << self
239
+ def make
240
+ new
241
+ end
242
+
243
+ def design(*_args)
244
+ new
245
+ end
246
+
247
+ def safety(*_args)
248
+ new
249
+ end
250
+
251
+ def dealer_options(*_args)
252
+ new
253
+ end
254
+
255
+ def will_not_be_logged
256
+ false
257
+ end
257
258
  end
259
+ logged :make
258
260
 
259
261
  # Option 2: Use *logged* as a macro
260
262
  logged :design, :safety
@@ -264,10 +266,8 @@ class Car
264
266
  logged :dealer_options, {
265
267
  something: "here", # <= will be logged, and available to last_hash_to_s_proc
266
268
  multiple_last_hashes: true, # <= Overrides config
269
+ error_handler_proc: nil, # NOTE: if you define the error_handler_proc inside a class like this you can use self inside the proc to refer to the class the method was called on!
267
270
  }
268
- def self.will_not_be_logged
269
- false
270
- end
271
271
  # == END CLASS METHODS ==
272
272
 
273
273
  # == BEGIN INSTANCE METHODS ==
@@ -314,7 +314,7 @@ class Car
314
314
  mark_scope_exit: false,
315
315
  add_payload: true, # Can also be a proc returning a string, which will be called when printing the payload
316
316
  payload_max_length: 1_000,
317
- error_handler_proc: nil,
317
+ error_handler_proc: nil, # NOTE: if you define the error_handler_proc inside a class like this you can use self inside the proc to refer to the instance of the class the method was called on!
318
318
  time_formatter_proc: DebugLogging::Constants::DEFAULT_TIME_FORMATTER,
319
319
  add_timestamp: false,
320
320
  instance_benchmarks: false,
@@ -376,20 +376,28 @@ class Car
376
376
  # == BEGIN CLASS METHODS ==
377
377
  # For class methods:
378
378
  # Option 1: Use *notified* as a method decorator
379
- notified def self.make
380
- new
381
- end
382
- def self.design(*_args)
383
- new
384
- end
385
-
386
- def self.safety(*_args)
387
- new
388
- end
389
-
390
- def self.dealer_options(*_args)
391
- new
379
+ class << self
380
+ def make
381
+ new
382
+ end
383
+
384
+ def design(*_args)
385
+ new
386
+ end
387
+
388
+ def safety(*_args)
389
+ new
390
+ end
391
+
392
+ def dealer_options(*_args)
393
+ new
394
+ end
395
+
396
+ def will_not_be_notified
397
+ false
398
+ end
392
399
  end
400
+ notified :make
393
401
 
394
402
  # Option 2: Use *logged* as a macro
395
403
  notified :design, :safety
@@ -400,9 +408,6 @@ class Car
400
408
  something: "here", # <== will be added to the event payload, and be available to last_hash_to_s_proc
401
409
  add_invocation_id: false, # <== Overrides config
402
410
  }
403
- def self.will_not_be_notified
404
- false
405
- end
406
411
  # == END CLASS METHODS ==
407
412
 
408
413
  # == BEGIN INSTANCE METHODS ==
@@ -434,43 +439,124 @@ class Car
434
439
  end
435
440
  ```
436
441
 
437
- ## Development
442
+ ## 🦷 FLOSS Funding
438
443
 
439
- Run tests!
444
+ While galtzo-floss tools are free software and will always be, the project would benefit immensely from some funding.
445
+ Raising a monthly budget of... "dollars" would make the project more sustainable.
440
446
 
441
- ```shell
442
- bundle install
443
- bundle exec rake
444
- ```
447
+ We welcome both individual and corporate sponsors! We also offer a
448
+ wide array of funding channels to account for your preferences.
449
+ Currently, [Open Collective][🖇osc] is our preferred funding platform.
445
450
 
446
- ## Contributing
451
+ **If you're working in a company that's making significant use of galtzo-floss tools we'd
452
+ appreciate it if you suggest to your company to become a galtzo-floss sponsor.**
447
453
 
448
- See [CONTRIBUTING.md][🪇conduct]
454
+ You can support the development of galtzo-floss tools via
455
+ [GitHub Sponsors][🖇sponsor],
456
+ [Liberapay][⛳liberapay],
457
+ [PayPal][🖇paypal],
458
+ [Open Collective][🖇osc]
459
+ and [Tidelift][🏙️entsup-tidelift].
449
460
 
450
- [🪇conduct]: CONTRIBUTING.md
461
+ | 📍 NOTE |
462
+ |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
463
+ | If doing a sponsorship in the form of donation is problematic for your company <br/> from an accounting standpoint, we'd recommend the use of Tidelift, <br/> where you can get a support-like subscription instead. |
451
464
 
452
- ## 🪇 Code of Conduct
465
+ ### Open Collective for Individuals
453
466
 
454
- Everyone interacting in this project's codebases, issue trackers,
455
- chat rooms and mailing lists is expected to follow the [code of conduct][🪇conduct].
467
+ Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/galtzo-floss#backer)]
456
468
 
457
- [🪇conduct]: CODE_OF_CONDUCT.md
469
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
458
470
 
459
- ## 📌 Versioning
471
+ <!-- OPENCOLLECTIVE-INDIVIDUALS:START -->
472
+ No backers yet. Be the first!
473
+ <!-- OPENCOLLECTIVE-INDIVIDUALS:END -->
460
474
 
461
- This Library adheres to [Semantic Versioning 2.0.0][📌semver].
462
- Violations of this scheme should be reported as bugs.
463
- Specifically, if a minor or patch version is released that breaks backward compatibility,
464
- a new version should be immediately released that restores compatibility.
465
- Breaking changes to the public API will only be introduced with new major versions.
475
+ ### Open Collective for Organizations
466
476
 
467
- To get a better understanding of how SemVer is intended to work over a project's lifetime,
468
- read this article from the creator of SemVer:
477
+ Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/galtzo-floss#sponsor)]
469
478
 
470
- - ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
479
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
480
+
481
+ <!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
482
+ No sponsors yet. Be the first!
483
+ <!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
484
+
485
+ [kettle-readme-backers]: https://github.com/galtzo-floss/debug_logging/blob/main/exe/kettle-readme-backers
486
+
487
+ ### Another way to support open-source
488
+
489
+ I’m driven by a passion to foster a thriving open-source community – a space where people can tackle complex problems, no matter how small. Revitalizing libraries that have fallen into disrepair, and building new libraries focused on solving real-world challenges, are my passions. I was recently affected by layoffs, and the tech jobs market is unwelcoming. I’m reaching out here because your support would significantly aid my efforts to provide for my family, and my farm (11 🐔 chickens, 2 🐶 dogs, 3 🐰 rabbits, 8 🐈‍ cats).
490
+
491
+ If you work at a company that uses my work, please encourage them to support me as a corporate sponsor. My work on gems you use might show up in `bundle fund`.
492
+
493
+ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed to empower open-source developers like myself to get paid for the work we do, in a sustainable way. Please give it a look.
471
494
 
472
- As a result of this policy, you can (and should) specify a dependency on these libraries using
473
- the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
495
+ **[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
496
+
497
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS efforts using Patreon][🖇patreon-img]][🖇patreon]
498
+
499
+ ## 🔐 Security
500
+
501
+ See [SECURITY.md][🔐security].
502
+
503
+ ## 🤝 Contributing
504
+
505
+ If you need some ideas of where to help, you could work on adding more code coverage,
506
+ or if it is already 💯 (see [below](#code-coverage)) check [issues][🤝gh-issues] or [PRs][🤝gh-pulls],
507
+ or use the gem and think about how it could be better.
508
+
509
+ We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
510
+
511
+ See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
512
+
513
+ ### 🚀 Release Instructions
514
+
515
+ See [CONTRIBUTING.md][🤝contributing].
516
+
517
+ ### Code Coverage
518
+
519
+ <details markdown="1">
520
+ <summary>Coverage service badges</summary>
521
+
522
+ [![Coverage Graph][🏀codecov-g]][🏀codecov]
523
+
524
+ [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls]
525
+
526
+ [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov]
527
+
528
+ </details>
529
+
530
+ ### 🪇 Code of Conduct
531
+
532
+ Everyone interacting with this project's codebases, issue trackers,
533
+ chat rooms and mailing lists agrees to follow the [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct].
534
+
535
+ ## 🌈 Contributors
536
+
537
+ [![Contributors][🖐contributors-img]][🖐contributors]
538
+
539
+ Made with [contributors-img][🖐contrib-rocks].
540
+
541
+ Also see GitLab Contributors: [https://gitlab.com/galtzo-floss/debug_logging/-/graphs/main][🚎contributors-gl]
542
+
543
+ <details>
544
+ <summary>⭐️ Star History</summary>
545
+
546
+ <a href="https://star-history.com/galtzo-floss/debug_logging&Date">
547
+ <picture>
548
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=galtzo-floss/debug_logging&type=Date&theme=dark" />
549
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=galtzo-floss/debug_logging&type=Date" />
550
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=galtzo-floss/debug_logging&type=Date" />
551
+ </picture>
552
+ </a>
553
+
554
+ </details>
555
+
556
+ ## 📌 Versioning
557
+
558
+ This library follows [![Semantic Versioning 2.0.0][📌semver-img]][📌semver] for its public API where practical.
559
+ For most applications, prefer the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
474
560
 
475
561
  For example:
476
562
 
@@ -478,52 +564,259 @@ For example:
478
564
  spec.add_dependency("debug_logging", "~> 4.0")
479
565
  ```
480
566
 
481
- [comment]: <> ( VERSIONING LINKS )
567
+ <details markdown="1">
568
+ <summary>📌 Is "Platform Support" part of the public API? More details inside.</summary>
482
569
 
483
- [📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
484
- [📌semver]: http://semver.org/
485
- [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
570
+ Dropping support for a platform can be a breaking change for affected users.
571
+ If a release changes supported platforms, it should be called out clearly in the changelog and versioned with that impact in mind.
572
+
573
+ To get a better understanding of how SemVer is intended to work over a project's lifetime,
574
+ read this article from the creator of SemVer:
575
+
576
+ - ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
577
+
578
+ </details>
579
+
580
+ See [CHANGELOG.md][📌changelog] for a list of releases.
486
581
 
487
582
  ## 📄 License
488
583
 
489
584
  The gem is available as open source under the terms of
490
- the [MIT License][📄license] [![License: MIT][📄license-img]][📄license-ref], with one exception:
585
+ the [MIT](MIT.md) [![License: MIT][📄license-img]][📄license-ref].
586
+
587
+ ### © Copyright
588
+
589
+ See [LICENSE.md][📄license] for the official copyright notice.
590
+
591
+ <details markdown="1">
592
+ <summary>Copyright holders</summary>
491
593
 
492
- * [`lib/debug_logging/finalize.rb`](lib/debug_logging/finalize.rb) came from [this StackOverflow](https://stackoverflow.com/a/34559282).
493
- * As such, it is licensed under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)
594
+ - Copyright (c) 2017-2018, 2020-2021, 2023-2024, 2026 Peter H. Boling
595
+ - Copyright (c) 2020 John Gillson
596
+ - Copyright (c) 2024 Aboling0
494
597
 
495
- See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright-notice-explainer].
598
+ </details>
496
599
 
497
- [comment]: <> ( LEGAL LINKS )
600
+ ## 🤑 A request for help
498
601
 
602
+ Maintainers have teeth and need to pay their dentists.
603
+ After getting laid off in an RIF in March, and encountering difficulty finding a new one,
604
+ I began spending most of my time building open source tools.
605
+ I'm hoping to be able to pay for my kids' health insurance this month,
606
+ so if you value the work I am doing, I need your support.
607
+ Please consider sponsoring me or the project.
608
+
609
+ To join the community or get help 👇️ Join the Discord.
610
+
611
+ [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
612
+
613
+ To say "thanks!" ☝️ Join the Discord or 👇️ send money.
614
+
615
+ [![Sponsor galtzo-floss/debug_logging on Open Source Collective][🖇osc-all-bottom-img]][🖇osc] 💌 [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
616
+
617
+ ### Please give the project a star ⭐ ♥.
618
+
619
+ Thanks for RTFM. ☺️
620
+
621
+ [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
622
+ [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
623
+ [⛳liberapay]: https://liberapay.com/pboling/donate
624
+ [🖇osc-all-img]: https://img.shields.io/opencollective/all/galtzo-floss
625
+ [🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/galtzo-floss
626
+ [🖇osc-backers-img]: https://img.shields.io/opencollective/backers/galtzo-floss
627
+ [🖇osc-backers]: https://opencollective.com/galtzo-floss#backer
628
+ [🖇osc-backers-i]: https://opencollective.com/galtzo-floss/backers/badge.svg?style=flat
629
+ [🖇osc-sponsors]: https://opencollective.com/galtzo-floss#sponsor
630
+ [🖇osc-sponsors-i]: https://opencollective.com/galtzo-floss/sponsors/badge.svg?style=flat
631
+ [🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/galtzo-floss?style=for-the-badge
632
+ [🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/galtzo-floss?style=for-the-badge
633
+ [🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/galtzo-floss?style=for-the-badge
634
+ [🖇osc]: https://opencollective.com/galtzo-floss
635
+ [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
636
+ [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
637
+ [🖇sponsor]: https://github.com/sponsors/pboling
638
+ [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
639
+ [🖇polar]: https://polar.sh/pboling
640
+ [🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
641
+ [🖇kofi]: https://ko-fi.com/pboling
642
+ [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
643
+ [🖇patreon]: https://patreon.com/galtzo
644
+ [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
645
+ [🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff
646
+ [🖇buyme]: https://www.buymeacoffee.com/pboling
647
+ [🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
648
+ [🖇paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A
649
+ [🖇paypal]: https://www.paypal.com/paypalme/peterboling
650
+ [🖇floss-funding.dev]: https://floss-funding.dev
651
+ [🖇floss-funding-gem]: https://github.com/galtzo-floss/floss_funding
652
+ [✉️discord-invite]: https://discord.gg/3qme4XHNKN
653
+ [✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
654
+ [✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
655
+ [✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
656
+
657
+ [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
658
+ [⛳️gem-namespace]: https://github.com/galtzo-floss/debug_logging
659
+ [⛳️namespace-img]: https://img.shields.io/badge/namespace-DebugLogging-3C2D2D.svg?style=square&logo=ruby&logoColor=white
660
+ [⛳️gem-name]: https://bestgems.org/gems/debug_logging
661
+ [⛳️name-img]: https://img.shields.io/badge/name-debug__logging-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
662
+ [⛳️tag-img]: https://img.shields.io/github/tag/galtzo-floss/debug_logging.svg
663
+ [⛳️tag]: https://github.com/galtzo-floss/debug_logging/releases
664
+ [🚂maint-blog]: http://www.railsbling.com/tags/debug_logging
665
+ [🚂maint-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
666
+ [🚂maint-contact]: http://www.railsbling.com/contact
667
+ [🚂maint-contact-img]: https://img.shields.io/badge/Contact-Maintainer-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
668
+ [💖🖇linkedin]: http://www.linkedin.com/in/peterboling
669
+ [💖🖇linkedin-img]: https://img.shields.io/badge/LinkedIn-Profile-0B66C2?style=flat&logo=newjapanprowrestling
670
+ [💖✌️wellfound]: https://wellfound.com/u/peter-boling
671
+ [💖✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=flat&logo=wellfound
672
+ [💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling
673
+ [💖💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=flat&logo=crunchbase
674
+ [💖🐘ruby-mast]: https://ruby.social/@galtzo
675
+ [💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https://ruby.social&style=flat&logo=mastodon&label=Ruby%20@galtzo
676
+ [💖🦋bluesky]: https://bsky.app/profile/galtzo.com
677
+ [💖🦋bluesky-img]: https://img.shields.io/badge/@galtzo.com-0285FF?style=flat&logo=bluesky&logoColor=white
678
+ [💖🌳linktree]: https://linktr.ee/galtzo
679
+ [💖🌳linktree-img]: https://img.shields.io/badge/galtzo-purple?style=flat&logo=linktree
680
+ [💖💁🏼‍♂️devto]: https://dev.to/galtzo
681
+ [💖💁🏼‍♂️devto-img]: https://img.shields.io/badge/dev.to-0A0A0A?style=flat&logo=devdotto&logoColor=white
682
+ [💖💁🏼‍♂️aboutme]: https://about.me/peter.boling
683
+ [💖💁🏼‍♂️aboutme-img]: https://img.shields.io/badge/about.me-0A0A0A?style=flat&logo=aboutme&logoColor=white
684
+ [💖🧊berg]: https://codeberg.org/pboling
685
+ [💖🐙hub]: https://github.org/pboling
686
+ [💖🛖hut]: https://sr.ht/~galtzo/
687
+ [💖🧪lab]: https://gitlab.com/pboling
688
+ [👨🏼‍🏫expsup-upwork]: https://www.upwork.com/freelancers/~014942e9b056abdf86?mp_source=share
689
+ [👨🏼‍🏫expsup-upwork-img]: https://img.shields.io/badge/UpWork-13544E?style=for-the-badge&logo=Upwork&logoColor=white
690
+ [👨🏼‍🏫expsup-codementor]: https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github
691
+ [👨🏼‍🏫expsup-codementor-img]: https://img.shields.io/badge/CodeMentor-Get_Help-1abc9c?style=for-the-badge&logo=CodeMentor&logoColor=white
692
+ [🏙️entsup-tidelift]: https://tidelift.com/subscription/pkg/rubygems-debug_logging?utm_source=rubygems-debug_logging&utm_medium=referral&utm_campaign=readme
693
+ [🏙️entsup-tidelift-img]: https://img.shields.io/badge/Tidelift_and_Sonar-Enterprise_Support-FD3456?style=for-the-badge&logo=sonar&logoColor=white
694
+ [🏙️entsup-tidelift-sonar]: https://blog.tidelift.com/tidelift-joins-sonar
695
+ [💁🏼‍♂️peterboling]: http://www.peterboling.com
696
+ [🚂railsbling]: http://www.railsbling.com
697
+ [📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
698
+ [📜src-gl]: https://gitlab.com/galtzo-floss/debug_logging
699
+ [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
700
+ [📜src-cb]: https://codeberg.org/galtzo-floss/debug_logging
701
+ [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
702
+ [📜src-gh]: https://github.com/galtzo-floss/debug_logging
703
+ [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
704
+ [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
705
+ [📜gl-wiki]: https://gitlab.com/galtzo-floss/debug_logging/-/wikis/home
706
+ [📜gh-wiki]: https://github.com/galtzo-floss/debug_logging/wiki
707
+ [📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
708
+ [📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
709
+ [👽dl-rank]: https://bestgems.org/gems/debug_logging
710
+ [👽dl-ranki]: https://img.shields.io/gem/rd/debug_logging.svg
711
+ [👽version]: https://bestgems.org/gems/debug_logging
712
+ [👽versioni]: https://img.shields.io/gem/v/debug_logging.svg
713
+ [🏀qlty-mnt]: https://qlty.sh/gh/galtzo-floss/projects/debug_logging
714
+ [🏀qlty-mnti]: https://qlty.sh/gh/galtzo-floss/projects/debug_logging/maintainability.svg
715
+ [🏀qlty-cov]: https://qlty.sh/gh/galtzo-floss/projects/debug_logging/metrics/code?sort=coverageRating
716
+ [🏀qlty-covi]: https://qlty.sh/gh/galtzo-floss/projects/debug_logging/coverage.svg
717
+ [🏀codecov]: https://codecov.io/gh/galtzo-floss/debug_logging
718
+ [🏀codecovi]: https://codecov.io/gh/galtzo-floss/debug_logging/graph/badge.svg
719
+ [🏀coveralls]: https://coveralls.io/github/galtzo-floss/debug_logging?branch=main
720
+ [🏀coveralls-img]: https://coveralls.io/repos/github/galtzo-floss/debug_logging/badge.svg?branch=main
721
+ [🖐codeQL]: https://github.com/galtzo-floss/debug_logging/security/code-scanning
722
+ [🖐codeQL-img]: https://github.com/galtzo-floss/debug_logging/actions/workflows/codeql-analysis.yml/badge.svg
723
+ [🚎ruby-3.1-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/ruby-3.1.yml
724
+ [🚎ruby-3.2-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/ruby-3.2.yml
725
+ [🚎ruby-3.3-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/ruby-3.3.yml
726
+ [🚎ruby-3.4-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/ruby-3.4.yml
727
+ [🚎jruby-9.4-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/jruby-9.4.yml
728
+ [🚎truby-23.1-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/truffleruby-23.1.yml
729
+ [🚎truby-24.2-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/truffleruby-24.2.yml
730
+ [🚎truby-25.0-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/truffleruby-25.0.yml
731
+ [🚎2-cov-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/coverage.yml
732
+ [🚎2-cov-wfi]: https://github.com/galtzo-floss/debug_logging/actions/workflows/coverage.yml/badge.svg
733
+ [🚎3-hd-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/heads.yml
734
+ [🚎3-hd-wfi]: https://github.com/galtzo-floss/debug_logging/actions/workflows/heads.yml/badge.svg
735
+ [🚎5-st-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/style.yml
736
+ [🚎5-st-wfi]: https://github.com/galtzo-floss/debug_logging/actions/workflows/style.yml/badge.svg
737
+ [🚎9-t-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/truffle.yml
738
+ [🚎9-t-wfi]: https://github.com/galtzo-floss/debug_logging/actions/workflows/truffle.yml/badge.svg
739
+ [🚎10-j-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/jruby.yml
740
+ [🚎10-j-wfi]: https://github.com/galtzo-floss/debug_logging/actions/workflows/jruby.yml/badge.svg
741
+ [🚎11-c-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/current.yml
742
+ [🚎11-c-wfi]: https://github.com/galtzo-floss/debug_logging/actions/workflows/current.yml/badge.svg
743
+ [🚎12-crh-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/dep-heads.yml
744
+ [🚎12-crh-wfi]: https://github.com/galtzo-floss/debug_logging/actions/workflows/dep-heads.yml/badge.svg
745
+ [🚎13-🔒️-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/locked_deps.yml
746
+ [🚎13-🔒️-wfi]: https://github.com/galtzo-floss/debug_logging/actions/workflows/locked_deps.yml/badge.svg
747
+ [🚎14-🔓️-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/unlocked_deps.yml
748
+ [🚎14-🔓️-wfi]: https://github.com/galtzo-floss/debug_logging/actions/workflows/unlocked_deps.yml/badge.svg
749
+ [🚎15-🪪-wf]: https://github.com/galtzo-floss/debug_logging/actions/workflows/license-eye.yml
750
+ [🚎15-🪪-wfi]: https://github.com/galtzo-floss/debug_logging/actions/workflows/license-eye.yml/badge.svg
751
+ [💎ruby-3.1i]: https://img.shields.io/badge/Ruby-3.1-CC342D?style=for-the-badge&logo=ruby&logoColor=white
752
+ [💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
753
+ [💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
754
+ [💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
755
+ [💎ruby-4.0i]: https://img.shields.io/badge/Ruby-4.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
756
+ [💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
757
+ [💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
758
+ [💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
759
+ [💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
760
+ [💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
761
+ [💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
762
+ [💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
763
+ [💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
764
+ [💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
765
+ [🤝gh-issues]: https://github.com/galtzo-floss/debug_logging/issues
766
+ [🤝gh-pulls]: https://github.com/galtzo-floss/debug_logging/pulls
767
+ [🤝gl-issues]: https://gitlab.com/galtzo-floss/debug_logging/-/issues
768
+ [🤝gl-pulls]: https://gitlab.com/galtzo-floss/debug_logging/-/merge_requests
769
+ [🤝cb-issues]: https://codeberg.org/galtzo-floss/debug_logging/issues
770
+ [🤝cb-pulls]: https://codeberg.org/galtzo-floss/debug_logging/pulls
771
+ [🤝cb-donate]: https://donate.codeberg.org/
772
+ [🤝contributing]: https://github.com/galtzo-floss/debug_logging/blob/main/CONTRIBUTING.md
773
+ [🏀codecov-g]: https://codecov.io/gh/galtzo-floss/debug_logging/graph/badge.svg
774
+ [🖐contrib-rocks]: https://contrib.rocks
775
+ [🖐contributors]: https://github.com/galtzo-floss/debug_logging/graphs/contributors
776
+ [🖐contributors-img]: https://contrib.rocks/image?repo=galtzo-floss/debug_logging
777
+ [🚎contributors-gl]: https://gitlab.com/galtzo-floss/debug_logging/-/graphs/main
778
+ [🪇conduct]: https://github.com/galtzo-floss/debug_logging/blob/main/CODE_OF_CONDUCT.md
779
+ [🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg
780
+ [📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
781
+ [📌semver]: https://semver.org/spec/v2.0.0.html
782
+ [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat
783
+ [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
784
+ [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
785
+ [📌changelog]: https://github.com/galtzo-floss/debug_logging/blob/main/CHANGELOG.md
786
+ [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
787
+ [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
788
+ [📌gitmoji]: https://gitmoji.dev
789
+ [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
790
+ [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
791
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.735-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
792
+ [🔐security]: https://github.com/galtzo-floss/debug_logging/blob/main/SECURITY.md
793
+ [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
499
794
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
500
- [📄license]: LICENSE.txt
501
- [📄license-ref]: https://opensource.org/licenses/MIT
502
- [📄license-img]: https://img.shields.io/badge/License-MIT-green.svg
503
-
504
- [semver]: http://semver.org/
505
- [pvc]: http://docs.rubygems.org/read/chapter/16#page74
506
- [railsbling]: http://www.railsbling.com
507
- [peterboling]: http://www.peterboling.com
508
- [coderwall]: http://coderwall.com/pboling
509
- [angellist]: https://angel.co/peter-boling
510
- [documentation]: http://rdoc.info/github/pboling/debug_logging/frames
511
- [homepage]: https://github.com/pboling/debug_logging
512
- [blogpage]: http://www.railsbling.com/tags/debug_logging/
513
-
514
- [comment]: <> ( PERSONAL LINKS )
515
-
516
- [💁🏼‍♂️aboutme]: https://about.me/peter.boling
517
- [💁🏼‍♂️angellist]: https://angel.co/peter-boling
518
- [💁🏼‍♂️devto]: https://dev.to/galtzo
519
- [💁🏼‍♂️followme]: https://img.shields.io/twitter/follow/galtzo.svg?style=social&label=Follow
520
- [💁🏼‍♂️twitter]: http://twitter.com/galtzo
521
-
522
- [comment]: <> ( KEYED LINKS )
523
-
524
- [🔑cc-mnt]: https://codeclimate.com/github/pboling/debug_logging/maintainability
525
- [🔑cc-mnti]: https://api.codeclimate.com/v1/badges/1f36d7019c3b81cae1a2/maintainability
526
- [🔑cc-cov]: https://codeclimate.com/github/pboling/debug_logging/test_coverage
527
- [🔑cc-covi]: https://api.codeclimate.com/v1/badges/1f36d7019c3b81cae1a2/test_coverage
528
- [🔑depfu]: https://depfu.com/github/pboling/debug_logging?project_id=2675
529
- [🔑depfui]: https://badges.depfu.com/badges/d1a4cf43255916521fef1e3685c61faa/count.svg
795
+ [📄license]: LICENSE.md
796
+ [📄license-ref]: MIT.md
797
+ [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
798
+ [📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
799
+ [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-✓-259D6C.svg?style=flat&logo=Apache
800
+
801
+ [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
802
+ [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
803
+ [🚎yard-current]: http://rubydoc.info/gems/debug_logging
804
+ [🚎yard-head]: https://debug-logging.galtzo.com
805
+ [💎stone_checksums]: https://github.com/galtzo-floss/stone_checksums
806
+ [💎SHA_checksums]: https://gitlab.com/galtzo-floss/debug_logging/-/tree/main/checksums
807
+ [💎rlts]: https://github.com/rubocop-lts/rubocop-lts
808
+ [💎rlts-img]: https://img.shields.io/badge/code_style_&_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
809
+ [💎appraisal2]: https://github.com/appraisal-rb/appraisal2
810
+ [💎appraisal2-img]: https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic&logo=ruby&logoColor=white
811
+ [💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
812
+
813
+ <!-- kettle-jem:metadata:start -->
814
+ | Field | Value |
815
+ |---|---|
816
+ | Package | debug_logging |
817
+ | Description | 🪲 Unobtrusive debug logging for Ruby. NO LITTERING.<br>Automatically log selected methods and their arguments as they are called at runtime! |
818
+ | Homepage | https://github.com/galtzo-floss/debug_logging |
819
+ | Source | https://github.com/galtzo-floss/debug_logging/tree/v4.0.3 |
820
+ | License | `MIT` |
821
+ | Funding | https://github.com/sponsors/pboling, https://issuehunt.io/u/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/pboling, https://patreon.com/galtzo, https://polar.sh/pboling, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/debug_logging, https://www.buymeacoffee.com/pboling |
822
+ <!-- kettle-jem:metadata:end -->