The project is in a healthy, maintained state
Rails v8 ActiveSupport::TaggedLogging, fixed & backported to Rails v5.2+ & Ruby 2.7+
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 3.13
~> 1.0, >= 1.0.6
~> 0.5, >= 0.5.2
~> 0.0.10
~> 2.5
~> 1.0, >= 1.0.4
~> 5.25, >= 5.25.1
>= 13
~> 18.2, >= 18.2.1
~> 3.6, >= 3.6.2
~> 0.9, >= 0.9.37
~> 6.8, >= 6.8.1

Runtime

~> 1.1, >= 1.1.4
~> 2.0, >= 2.0.3
~> 1.6, >= 1.6.1
~> 0.1
>= 0.0.2
 Project Readme

Activesupport::TaggedLogging

Version License: MIT Downloads Rank Open Source Helpers Depfu CodeCov Test Coverage Maintainability CI Supported Build CI Legacy Build CI Unsupported Build CI Heads Build CI Coverage Build CI Style Build


Liberapay Patrons Sponsor Me on Github Polar Shield Donate to my FLOSS or refugee efforts at ko-fi.com Donate to my FLOSS or refugee efforts using Patreon

This is an unofficial extraction of Rails' v8 ActiveSupport::TaggedLogging which has been:

  • refactored (here) to work with broadcast logging, and
  • backported to work with Rails v5.2+ and Ruby 2.7+.

If the suite of gems this is part of is loaded in any version of Rails >= 5.2, it will replace the logging tooling completely.

This gem automatically depends on and configures the other gems in the suite. Simply add it to your Gemfile, and configure. The other gems will just work.

Simplified, the load order is basically:

Above load order is handled for you in activesupport-tagged_logging (this gem), so depend on this gem, not the siblings. ;)

Installation

Install the gem and add to the application's Gemfile by executing:

$ bundle add activesupport-tagged_logging

If bundler is not being used to manage dependencies, install the gem by executing:

$ gem install activesupport-tagged_logging

Usage

When it doesn't work

NameError: uninitialized constant ActiveSupport::TaggedLogging

The issue is likely that canonical active_support has been loaded before this gem had a chance to load.

This is a common issue, see the following for more context:

This gem has a solution for all of the above, but it only works if this gem is loaded first.

Keep reading below.

With Rails

In a Rails project change config/boot.rb to match:

ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)

require "bundler/setup" # Set up gems listed in the Gemfile.

# NOTE: needs to load before active_support, so the magic will work.
require "activesupport-tagged_logging"

require "bootsnap/setup" # Speed up boot time by caching expensive operations.

With Sidekiq

You won't be able to use bundle exec sidekiq, as that results in loading active_support too early. However, you should have a bin/sidekiq binstub, which can be fixed to load activesupport-tagged_logging early!

Change the last few lines of bin/sidekiq to match:

require "rubygems"
require "bundler/setup"

# NOTE: needs to load before active_support, so the magic will work.
#       sidekiq, when loaded in Rails, loads active_job,
#       which depends on active_support, hence this early load hack.
require "activesupport-tagged_logging"

load Gem.bin_path("sidekiq", "sidekiq")

With activesupport-logger gem

activesupport-logger is automatically depended on and configured by this gem, so you don't need to do anything else.

IMPORTANT: When using this gem, do not require "activesupport-logger" in your code. Load order matters.

With activesupport-broadcast_logger gem

activesupport-broadcast_logger is automatically depended on and configured by this gem, so you don't need to do anything else.

IMPORTANT: When using this gem, do not require "activesupport-broadcast_logger" in your code. Load order matters.

With broadcasting support

If you want to try an experimental fix from a PR, run:

Activesupport::FixPr53105.init

NOTE: The bits of logic that are unique to this gem are in the namespace Activesupport (sic).

See: https://github.com/rails/rails/pull/53105/files

General Info

Primary Namespaces Activesupport::TaggedLogging && ActiveSupport::TaggedLogging && Activesupport::FixPr53105
documentation on Github.com, Latest release on RubyDoc.info, HEAD on RubyDoc.info
expert support Get help on Codementor
... 💖 Follow Me on LinkedIn Find Me on WellFound: Find Me on CrunchBase My LinkTree Follow Me on Ruby.Social Tweet @ Peter 💻 🌏

🤝 Contributing

If you need some ideas of where to help, you could work on adding more code coverage, or if it is already 💯 then check issues, or PRs, or use the gem and think about how it could be better.

Also, see CONTRIBUTING.md.

Code Coverage

Coverage Graph

🌈 Contributors

Contributors

Made with contributors-img.

Star History

Star History Chart

🪇 Code of Conduct

Everyone interacting in this project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.

📌 Versioning

This Library adheres to Semantic Versioning 2.0.0. Violations of this scheme should be reported as bugs. Specifically, if a minor or patch version is released that breaks backward compatibility, a new version should be immediately released that restores compatibility. Breaking changes to the public API will only be introduced with new major versions.

To get a better understanding of how SemVer is intended to work over a project's lifetime, read this article from the creator of SemVer:

As a result of this policy, you can (and should) specify a dependency on these libraries using the Pessimistic Version Constraint with two digits of precision.

For example:

spec.add_dependency("activesupport-tagged_logging", "~> 2.0")

See CHANGELOG.md for list of releases.

📄 License

The gem is available as open source under the terms of the MIT License License: MIT.

See LICENSE.txt for the official Copyright Notice.

© Copyright

🤑 One more thing

You made it to the bottom of the page, so perhaps you'll indulge me for another 20 seconds. I maintain many dozens of gems, including this one, because I want Ruby to be a great place for people to solve problems, big and small. Please consider supporting my efforts via the giant yellow link below, or one of the others at the head of this README.

Buy me a latte