Project

ama_logger

0.0
No release in over 3 years
Low commit activity in last 3 years
Log formatters and helper classes for the AMA standardized log format
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
~> 12.2
~> 3.0
= 0.65.0
 Project Readme

Ama::Logger

This library implements AMA's standardized log format.

Installation

Add this line to your application's Gemfile:

gem 'ama_logger', git: 'git@github.com:amaabca/ama_logger'

Usage

A default logger instance that writes to STDOUT is provided via the Ama.logger method:

Ama.logger.info(context: context, event_name: 'log.info', metric_name: 'test', metric_value: 1)

You can override the default logger instance if you wish:

Ama.logger = Ama::Logger.lambda(STDERR, level: Logger::Severity::DEBUG)

The default logger instance is intended for use with AWS Lambda - it requires a context instance (from a Lambda handler) to be passed as well as any additional data.

Formatters

This library includes the following custom log formatters:

Ama::Logger::Formatter::Lambda

This formatter accepts a Ruby hash as a message, an AWS Lambda context instance and outputs a JSON string.

The input hash must look like:

Ama.logger.info(
  context: context,                             # required - the Lambda context instance (https://docs.aws.amazon.com/lambda/latest/dg/ruby-context.html)
  event_name: 'log.info',                       # required
  exception: 'ArgumentError - something broke', # optional - indexed
  metric_name: 'error:count',                   # optional - indexed
  metric_value: 1,                              # optional - indexed, coerced to integer
  metric_content: 'error',                      # optional - indexed, coerced to string
  details: { message: 'test' }                  # optional - non-indexed, Hash coerced to string
)

Ama::Logger::Formatter::Json

This formatter accepts a Ruby hash as a message and outputs a JSON string.

The input hash must look like:

Ama.logger.info(
  event_name: 'log.info',                       # required
  event_id: '1234',                             # required - indexed
  event_source: 'my_source',                    # required - indexed
  exception: 'ArgumentError - something broke', # optional - indexed
  execution_time_ms: 1234.56,                   # optional - indexed
  metric_name: 'error:count',                   # optional - indexed
  metric_value: 1,                              # optional - indexed, coerced to integer
  metric_content: 'error',                      # optional - indexed, coerced to string
  details: { message: 'test' }                  # optional - non-indexed, Hash coerced to string
)

Ama::Logger::Formatter::StringifiedHash

This formatter accepts string message and outputs a JSON string. The formatter is able to filter sensitive data based on the input provided.

Instances of this formatter accept the following parameters during initialization:

Ama::Logger::Formatter::StringifiedHash.new(
  filters: [:password],  # optional - named parameters that will be filtered from output
  event_name: 'my.event' # optional - mapped to the `eventName` property in JSON output
)

This formatter is commonly used to filter sensitive data from internal Rails logging mechanisms (i.e. ActiveJob).

See below for an example to override the ActiveJob logger:

ActiveJob::Base.logger = Ama::Logger.stringified_hash(
  ActiveJob::Base.logger,
  event_name: 'rails.activejob',
  filters: Rails.configuration.filter_parameters,
  progname: 'gatekeeper'
)

Mixins

Ama::Logger::Mixins::LambdaHandler

Defines a method that accepts the event: and context: named arguments as used in an AWS lambda function and logs the input event and output response.

class MyClass
  extend Ama::Logger::Mixins::LambdaHandler

  define_lambda_handler(:handler) do |event, context|
    # do something
  end
end

MyClass.handle(event: event, context: context) # => the output of lambda handler

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/amaabca/ama_logger.

License

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