This is a library that wraps the fluent-logger gem and provides easy integration with your Rails application. This includes a log formatter that supports Rails tagged logging so your output JSON format that can be sent to Fluentd (or really any other logging backend).
gem install fluent_logger_rails
Rails.application.configure do
config.logger = FluentLoggerRails::Logger.new(
::Fluent::Logger::FluentLogger.new(
nil,
host: 'localhost',
port: 24224,
),
level: config.log_level
)
# if you are using tagged logging, you need a formatter that supports it
config.logger.formatter = FluentLoggerRails::TaggedHashFormatter.new
endThis gem includes a formatter that supports Rails tagged logging.
This is a JSON formatter that supports tagged logging.
config.logger.formatter = FluentLoggerRails::TaggedHashFormatter.new
config.logger.formatter.datetime_format = '%Y-%m-%d %H:%M:%S.%3N%z'
config.logger.formatter.parent_key = 'payload'The standard Rails tagged logger works as well for standard output.
ActiveSupport::TaggedLogging.new(config.logger)Rails.logger.tagged(user.id) do
Rails.logger.warn('UserUpdateJob failed')
end
#
# Outputs:
#
# {
# "tags": [1234],
# "message": "UserUpdateJob failed",
# "severity": "WARN",
# "timestamp": "2019-01-08 14:51:39.701-0800",
# }Rails.logger.tagged(user_id: user.id, session_id: user_session.id) do
Rails.logger.info(message: 'UserUpdateJob failed', args: args)
end
#
# Outputs:
#
# {
# "user_id": 1234,
# "session_id": 883839,
# "message": {
# "message": "UserUpdateJob failed",
# "args": [1,2,3]
# },
# "severity": "INFO",
# "timestamp": "2019-01-08 14:51:39.701-0800",
# }Rails.logger.tagged(user.id, user_session.id) do
Rails.logger.info('UserUpdateJob failed')
end
#
# Outputs:
#
# [1234] [883839] UserUpdateJob failedYou can setup Fluentd with ruby gems as described on Fluentd docs. Once that is running, simply configure your environment with the example above and the logs should appear.