Scrolls is a library for generating logs of the structure key=value.
Installation
Add this line to your application's Gemfile:
And then execute:
Or install it yourself as:
Philosophy
Scrolls follows the belief that logs should be treated as data. One way to think of them is the blood of your infrastructure. Logs are a realtime view of what is happening on your systems.
Usage
0.9.0 and later
require 'scrolls' Scrolls.init( timestamp: true, global_context: {app: "scrolls", deploy: "production"}, exceptions: "multi" ) Scrolls.log(at: "test") Scrolls.context(context: "block") do Scrolls.log(at: "exec") end begin raise rescue Exception => e Scrolls.log_exception(e, at: "raise") end
You can also use Scrolls#log and Scrolls#log_exception without initalizing:
require 'scrolls' Scrolls.log(test: "test")
Defaults
Here are the defaults Scrolls#init:
stream: STDOUT
facility: Syslog::LOG_USER
time_unit: "seconds"
timestamp: false
exceptions: "single"
global_context: {}
syslog_options: Syslog::LOG_PID|Syslog::LOG_CONS
escape_keys: false
strict_logfmt: false
Older Versions
Pre 0.9.0
require 'scrolls' Scrolls.add_timestamp = true Scrolls.global_context(:app => "scrolls", :deploy => "production") Scrolls.log(:at => "test") Scrolls.context(:context => "block") do Scrolls.log(:at => "exec") end begin raise rescue Exception => e Scrolls.log_exception(:at => "raise", e) end
Produces:
now="2017-09-01T00:37:13Z" app=scrolls deploy=production at=test
now="2017-09-01T00:37:13Z" app=scrolls deploy=production context=block at=exec
now="2017-09-01T00:37:13Z" app=scrolls deploy=production at=exception class=RuntimeError exception_id=70149797587080
now="2017-09-01T00:37:13Z" app=scrolls deploy=production at=exception class=RuntimeError exception_id=70149797587080 site="./test-scrolls.rb:16:in <main>"
History
This library originated from various logging methods used internally at Heroku. Starting at version 0.2.0 Scrolls was ripped apart and restructured to provide a better foundation for the future. Tests and documentation were add at that point as well.
Thanks to the following people for influencing this library.
- Mark McGranaghan
- Noah Zoschke
- Mark Fine
- Fabio Kung
- Ryan Smith
LICENSE
MIT License