Skip to content

101 formatting log messages

Nathan Hopkins edited this page Jul 11, 2013 · 6 revisions

Yell 101 - How To: Formatting Log Messages

In order to format the log message you have a variety of possibilities. Yell provides placeholders to enrich your message with additional information. When passing the :format option, the following placeholders are recognized:

%m : The message to be logged
%d : The ISO8601 Timestamp
%L : The log level, e.g INFO, WARN
%l : The log level (short), e.g. I, W
%p : The PID of the process from where the log event occured
%t : The Thread ID from where the log event occured
%h : The hostname of the machine from where the log event occured
%f : The filename from where the log event occured
%n : The line number of the file from where the log event occured
%F : The filename with path from where the log event occured
%M : The method where the log event occured

You can combine those placeholders as you like and the following examples should give you a better understanding.

Predefined Formats

There are some already defined formats available to use:

Default Format

The default formatting string looks like: %d [%5L] %p : %m and is used when nothing else is defined.

logger = Yell.new STDOUT, :format => Yell::DefaultFormat
logger.info "Hello World!"
#=> "2012-02-29T09:30:00+01:00 [ INFO] 65784 : Hello World!"
#    ^                         ^       ^       ^
#    ISO8601 Timestamp         Level   Pid     Message

Basic Format

The basic formating string looks like: %l, %d: %m

logger = Yell.new STDOUT, :format => Yell::BasicFormat
logger.info "Hello World!"
#=> "I, 2012-02-29T09:30:00+01:00 : Hello World!"
#    ^  ^                          ^
#    ^  ISO8601 Timestamp          Message
#    Level (short)

Extended Format

The extended formatting string looks like: %d [%5L] %p %h : %m

logger = Yell.new STDOUT, :format => Yell::ExtendedFormat
logger.info "Hello World!"
#=> "2012-02-29T09:30:00+01:00 [ INFO] 65784 localhost : Hello World!"
#    ^                          ^      ^     ^           ^
#    ISO8601 Timestamp          Level  Pid   Hostname    Message

No Format

logger = Yell.new STDOUT, :format => false
logger.info "Hello World!"
#=> "Hello World!"

Alternatively, you may use Yell::NoFormat

logger = Yell.new STDOUT, :format => Yell::NoFormat
logger.info "Hello World!"
#=> "Hello World!"

Define Your Own Format

logger = Yell.new STDOUT, :format => "%m @ %d"
logger.info "Hello World!"
#=> "Hello World! @ 2012-02-29T09:30:00+01:00"

Note: File based placeholders (%f, %n, %F, %M) will be empty unless the desired levels are set using the trace option.

# trace not set
logger = Yell.new STDOUT, :format => "%F:%n %m", :level => [:debug, :info, :warn, :error, :fatal]
logger.info "Hello World!"
#=> ": Hello World!"

# trace set
levels = [:debug, :info, :warn, :error, :fatal]
logger = Yell.new STDOUT, :format => "%F:%n %m", :trace => levels, :level => levels
logger.info "Hello World!"
#=> "/path/to/file.rb:3 Hello World!"

Alternative Time Format

logger = Yell.new STDOUT, :format => Yell.format( "%d: %m", "%H:%M:%S" )
logger.info "Hello World!"
#=> "09:30:00 : Hello World!"
#    ^          ^
#    ^          Message
#    Custom time format (Hours:Minutes:Seconds)