reidmorrison / rails_semantic_logger

Rails Semantic Logger replaces the Rails default logger with Semantic Logger
https://logger.rocketjob.io/rails
Apache License 2.0
328 stars 116 forks source link

ActiveSupport::Logger getting "hijacked" by Rails Semantic Logger? #141

Open gingerlime opened 3 years ago

gingerlime commented 3 years ago

This is more of a question ... We're not entirely sure what's happening under the hood here, but it feels strange.

Environment

Hope this image explains the issue?

image

This was initially reported on https://github.com/rails/webpacker/issues/3208

It seems like rails semantic logger "hijacks" ActiveSupport::Logger in some way, and then when Webpacker uses ActiveSupport::Logger.new(STDOUT), it doesn't return an ActiveSupport::Logger instance, and the Rails semantic logger instance being returned does not actually log to stdout ?

Expected Behavior

Logs to stdout

Actual Behavior

Does not log to stdout.

reidmorrison commented 2 years ago

Semantic Logger is as clean as I can make it, but Rails Semantic Logger is nothing but a huge ugly hack to try and get Rails to log in a Semantic (machine readable) way. All of the hackery goes on in here: https://github.com/reidmorrison/rails_semantic_logger/blob/master/lib/rails_semantic_logger/engine.rb

If Rails adopted Semantic Logger directly we could just delete Rails Semantic Logger entirely.

To fix the stdout logging problems with Rails, we used this hack: https://github.com/reidmorrison/rails_semantic_logger/blob/master/lib/rails_semantic_logger/extensions/rails/server.rb

A similar patch for Web Packer would send all log messages to the right place.

gingerlime commented 2 years ago

Thank you @reidmorrison. It's hard for me to say, since I'm not deeply familiar with ruby logging or the rails internals. Have you considered submitting a PR to improve the Rails logging? I'm sure the community can benefit from your experience. Perhaps you can also propose integrating SemanticLogger into Rails? I'd be happy to "vouch" for it, FWIW :)

Wishing you a happy holiday season and a very happy and healthy 2022. Thanks for contributing your time and energy into open-source. I know it's not easy and not everyone is grateful, but I certainly appreciate your work, and the work of many other open-source contributors. I also try to contribute where I can, on my "own" projects and others like SemanticLogger. If there's anything I can do more to help, please let me know and I'll do my best to help.

viktorianer commented 8 months ago

Not sure if it helps, but Rails logs now to STDOUT by default, see https://github.com/rails/rails/pull/47138.

Could we modify the following lines, to provide a different format and logger?

config.logger = ActiveSupport::Logger.new(STDOUT)
    .tap  { |logger| logger.formatter = ::Logger::Formatter.new }
    .then { |logger| ActiveSupport::TaggedLogging.new(logger) }