Skip to content

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

.format(entry, io)

Write the Log::Entry to the IO using this pattern

View source

.new(entry : Log::Entry, io : IO)

View source

Methods

#context(*, 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.

View source

#data(*, 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.

View source

#exception(*, 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

View source

#message

Write the message of the entry

View source

#pid(*, before = '#', after = nil)

Write the current process identifier

View source

#progname

Write the program name. See Log.progname.

View source

abstract #run

Subclasses must implement this method to define the output pattern

View source

#severity

Write the severity

This writes the severity in uppercase and left padded with enough space so all the severities fit

View source

#source(*, 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

View source

#string(str)

Write a fixed string

View source

#timestamp

Write the entry timestamp in RFC3339 format

View source