struct

Log::StaticFormatter

Inherits Struct / Value / Object

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}"

Constructors

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

Class methods

format(entry : Log::Entry, io : IO) : Nil

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

Source

Instance methods

context(*, before : _ = nil, after : _ = nil) : 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.

Source
data(*, before : _ = nil, after : _ = nil) : 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.

Source
exception(*, before : _ = '\n', after : _ = nil) : 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

Source
message

Write the message of the entry

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

Write the current process identifier

Source
progname

Write the program name. See Log.progname.

Source
run

Subclasses must implement this method to define the output pattern

Source
severity

Write the severity

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

Source
source(*, before : _ = nil, after : _ = nil) : 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
Source
string(str : _) : Nil

Write a fixed string

Source
timestamp

Write the entry timestamp in RFC3339 format

Source