Yell - Your Extensible Logging Library
Yell works and is tested with ruby 1.8.7, 1.9.x, jruby 1.8 and 1.9 mode, rubinius 1.8 and 1.9 as well as ree.
If you want to use Yell with Rails, then head over to yell-rails.
gem install yell
Or in your Gemfile:
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" #=> "2012-02-29T09:30:00+01:00 [ INFO] 65784 : Hello World" # ^ ^ ^ ^ # ISO8601 Timestamp Level Pid Message
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:
logger = Yell.new do |l| l.adapter STDOUT, :level => [:debug, :info, :warn] l.adapter STDERR, :level => [:error, :fatal] end
We setup a logger that starts passing messages at the
:info level. Severities
:error go into the 'production.log', whereas anything higher is written
into the 'error.log'.
logger = Yell.new do |l| l.level = :info # will only pass :info and above to the adapters l.adapter :datefile, 'production.log', :level => Yell.level.lte(:warn) l.adapter :datefile, 'error.log', :level => Yell.level.gte(:error) end
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 # create a logger named 'mylog' that logs to stdout mylog = Logger.new 'mylog' mylog.outputters = Outputter.stdout # later in the code, you can get the logger back Logger['mylog']
With Yell you can do the same thing with less:
require 'yell' # create a logger named 'mylog' that logs to stdout Yell.new :stdout, :name => 'mylog' # later in the code, you can get the logger back Yell['mylog']
There is no need to define outputters separately and you don't have to taint you global namespace with Yell's subclasses.
You can find further examples and additional adapters in the wiki. or have a look into the examples folder.
Copyright © 2011-2012 Rudolf Schmidt, released under the MIT license