SimpleStructuredLogger

Dead-simple structured logging in ruby with a dead-simple codebase. That’s it.

“by gem ‘simple_structured_logger’

Design Goals

  • Extremely simple codebase that’s easy to read and override
  • Structured logging that reads nicely
  • Ability to easily set context, and expand context with user-configurable hook
  • Ability to easily add structured log pre-processing. I want to be able to pass in an object specific to my application and for the relavent important keys to be expanded automatically.
  • Rails.logger = SimpleStructuredLogger.new(STDOUT)
  • Not designed around massive systems or scale
  • Don’t support multiple log destinations
  • Don’t build in fancy pre-processing for errors or other common ruby objects

Opinionated Devops Setup

  • Errors are tracked using Rollbar, Airbrake, Sentry, etc.
  • Log to STDOUT
  • Pipe STDOUT to PaperTrail, Loggly, etc
  • Great for Heroku or dokku/docker hosted system

Alternatives

  • https://github.com/jordansissel/ruby-cabin
  • https://github.com/asenchi/scrolls
  • https://github.com/stripe/chalk-log
  • https://github.com/nishidayuya/structured_logger

Why is structured logging important?

  • https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying
  • http://juliusdavies.ca/logging.html

What about Rail’s tagged logging?

Tagged logging is not structured logging. I want to be able to search through PaperTrail and easily grab an audit trail for a specific context, i.e. the_job=FailingJob the_user=1.

Usage

TODO: Write usage instructions here

Testing

“undle exec rake