abstract struct Log::StaticFormatter
inherits Struct
¶
Base implementation of Log::Formatter
to convert
log entries into text representation
This can be used to create efficient formatters:
require "log"
struct MyFormat < Log::StaticFormatter
def run
string "- "
severity
string ": "
message
end
end
Log.setup(:info, Log::IOBackend.new(formatter: MyFormat))
Log.info { "Hello" } # => - INFO: Hello
Log.error { "Oh, no!" } # => - ERROR: Oh, no!
There is also a helper macro to generate these formatters. Here's an example that generates the same result:
Log.define_formatter MyFormat, "- #{severity}: #{message}"
Extended modules
Log::Formatter
Direct known subclasses
Log::ShortFormat
Class methods¶
Methods¶
#context(*, before = nil, after = nil)
¶
(*, before = nil, after = nil)
Write all the values from the context
It doesn't write any output if the context is empty.
Parameters before
and after
can be provided to be written around
the value.
#data(*, before = nil, after = nil)
¶
(*, before = nil, after = nil)
Write all the values from the entry data
It doesn't write any output if the entry data is empty.
Parameters before
and after
can be provided to be written around
the value.
#exception(*, before = '\n', after = nil)
¶
(*, before = '\n', after = nil)
Write the exception, including backtrace
It doesn't write any output unless there is an exception in the entry.
Parameters before
and after
can be provided to be written around
the value. before
defaults to '\n'
so the exception is written
on a separate line
#severity
¶
Write the severity
This writes the severity in uppercase and left padded with enough space so all the severities fit
#source(*, before = nil, after = nil)
¶
(*, before = nil, after = nil)
Write the source for non-root entries
It doesn't write any output for entries generated from the root logger.
Parameters before
and after
can be provided to be written around
the value.
Log.define_formatter TestFormatter, "#{source(before: '[', after: "] ")}#{message}"
Log.setup(:info, Log::IOBackend.new(formatter: TestFormatter))
Log.for("foo.bar").info { "Hello" } # => - [foo.bar] Hello