/cloudwatchlogger

Rails compatible logger that sends events to AWS CloudWatchLogs

Primary LanguageRubyMIT LicenseMIT

Overview

Send logged messages to AWS CloudWatch Logs using the ruby AWS SDK.

Can be used in place of Ruby's Logger (http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc/)

In fact, it (currently) returns an instance of Logger.

Forked from loggiler.

Usage

require 'cloudwatchlogger'

log = CloudWatchLogger.new({access_key_id: 'YOUR_ACCESS_KEY_ID', secret_access_key: 'YOUR_SECRET_ACCESS_KEY'}, 'YOUR_CLOUDWATCH_LOG_GROUP')

log.info("Hello World from Ruby")

The region will default to the value of the environment variable AWS_REGION. In case you need to pass different region or group's different Log Stream name:

log = CloudWatchLogger.new({
  access_key_id: 'YOUR_ACCESS_KEY_ID',
  secret_access_key: 'YOUR_SECRET_ACCESS_KEY'
}, 'YOUR_CLOUDWATCH_LOG_GROUP', 'YOUR_CLOUDWATCH_LOG_STREAM', region: 'YOUR_CLOUDWATCH_REGION' )

Provding an empty hash instead of credentials will cause the AWS SDK to search the default credential provider chain for credentials, namely:

  1. Environment variables AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY
  2. Amazon ECS container credentials (task role)
  3. Instance profile credentials (IAM role)

With Rails

config/environments/production.rb

RailsApplication::Application.configure do
  config.logger = CloudWatchLogger.new({access_key_id: 'YOUR_ACCESS_KEY_ID', secret_access_key: 'YOUR_SECRET_ACCESS_KEY'}, 'YOUR_CLOUDWATCH_LOG_GROUP')
end

With Rails 4

config/initializers/cloudwatchlogger.rb

cloudwatchlogger = CloudWatchLogger.new({access_key_id: 'YOUR_ACCESS_KEY_ID', secret_access_key: 'YOUR_SECRET_ACCESS_KEY'}, 'YOUR_CLOUDWATCH_LOG_GROUP')
Rails.logger.extend(ActiveSupport::Logger.broadcast(cloudwatchlogger))

Logging

CloudWatchLogger.new returns a ruby Logger object, so take a look at:

http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc/

The Logger's logdev has some special format handling though.

Logging a string

log.warn "test"

Will produce the following log message in CloudWatch Logs:

"<Date> severity=WARN, test"

Logging a Hash

log.warn :boom => :box, :bar => :soap

Will produce the following log message in CloudWatch Logs:

"<Date> severity=WARN, boom=box, bar=soap"

Releasing

rake release

Bugs

https://github.com/zshannon/cloudwatchlogger/issues

Pull requests welcome.