Yell
Yell - Your Extensible Logging Library is a comprehensive logging replacement for Ruby.
Yell works and its test suite currently runs on:
- ruby-head, 2.3.1, 2.2.5, 2.2.2, 2.1.0, 2.0.0
- jruby-head, jruby-9.1.0.0, jruby-9.0.0.0
If you want to conveniently use Yell with Rails, then head over to yell-rails. You'll find all the documentation in this repository, though.
Installation
System wide:
gem install yell
Or in your Gemfile:
gem "yell"
Usage
On the basics, you can use Yell just like any other logging library with a more
sophisticated message formatter.
logger = Yell.new STDOUT
logger.info "Hello World"
The strength of Yell, however, comes when using multiple adapters. The already built-in
ones are IO-based and require no further configuration. Also, there are additional ones
available as separate gems. Please consult the wiki
on that - they are listed there.
The standard adapters are:
:stdout
: Messages will be written to STDOUT
:stderr
: Messages will be written to STDERR
:file
: Messages will be written to a file
:datefile
: Messages will be written to a timestamped file
Here are some short examples on how to combine them:
Example: Notice messages go into STDOUT
and error messages into STDERR
logger = Yell.new do |l|
l.adapter STDOUT, level: [:debug, :info, :warn]
l.adapter STDERR, level: [:error, :fatal]
end
Example: Typical production Logger
We setup a logger that starts passing messages at the :info
level. Severities
below :error
go into the 'production.log', whereas anything higher is written
into the 'error.log'.
logger = Yell.new do |l|
l.level = 'gte.info'
l.adapter :datefile, 'production.log', level: 'lte.warn'
l.adapter :datefile, 'error.log', level: 'gte.error'
end
Example: Typical production Logger for Heroku
When deploying to Heroku, the "rails_log_stdout" gem gets injected to your Rails project.
Yell does not need that when properly configured (see yell-rails
for a more convenient integration with Rails).
logger = Yell.new do |l|
l.level = 'gte.info'
l.adapter :stdout, level: 'lte.warn'
l.adapter :stderr, level: 'gte.error'
end
But I'm used to Log4r and I don't want to move on
One of the really nice features of Log4r is its repository. The following example is
taken from the official Log4r documentation.
require 'log4r'
include Log4r
mylog = Logger.new 'mylog'
mylog.outputters = Outputter.stdout
Logger['mylog']
With Yell you can do the same thing with less:
require 'yell'
Yell.new :stdout, name: 'mylog'
Yell['mylog']
There is no need to define outputters separately and you don't have to taint
you global namespace with Yell's subclasses.
Adding a logger to an existing class
Yell comes with a simple module: +Yell::Loggable+. Simply include this in a class and
you are good to go.
Yell.new :stdout, name: 'Foo'
class Foo
include Yell::Loggable
end
Foo.logger.info "Hello World"
Foo.new.logger.info "Hello World"
It even works with class inheritance:
class Bar < Foo
end
Bar.logger.info "Hello World"
Bar.new.logger.info "Hello World"
Adding a logger to all classes at once (global logger)
Derived from the example above, simply do the following.
Yell.new :stdout, name: Object
Object.send :include, Yell::Loggable
logger.info "Hello from anything"
Integer.logger.info "Hello from Integer"
Suppress log messages with silencers
In case you woul like to suppress certain log messages, you may define
silencers with Yell. Use this to get control of a noisy log environment. For
instance, you can suppress logging messages that contain secure information or
more simply, to skip information about serving your Rails assets. Provide a
string or a regular expression of the message patterns you would like to exclude.
logger = Yell.new do |l|
l.silence /^Started GET "\/assets/
l.silence /^Served asset/
end
logger.debug 'Started GET "/assets/logo.png" for 127.0.0.1 at 2013-06-20 10:18:38 +0200'
logger.debug 'Served asset /logo.png - 304 Not Modified (0ms)'
Alter log messages with modifiers
Further Readings
How To: Setting The Log Level
How To: Formatting Log Messages
How To: Using Adapters
How To: The Datefile Adapter
How To: Different Adapters for Different Log Levels
Additional Adapters
Syslog
syslog-sd
Graylog2 (GELF)
Fluentd
Development
How To: Writing Your Own Adapter
You can find further examples and additional adapters in the wiki.
or have a look into the examples folder.
Copyright © 2011-current Rudolf Schmidt, released under the MIT license