abstract struct Log::StaticFormatter

Overview

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

Defined in:

launcher/log-patch.cr

Constructors

Class Method Summary

Instance Method Summary

Constructor Detail

def self.new(entry : Log::Entry, io : IO) #

[View source]

Class Method Detail

def self.colorized #

[View source]
def self.colorized=(colorized : Bool) #

[View source]

Instance Method Detail

def 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]
def message #

Write the message of the entry


[View source]
def severity #

Write the severity

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


[View source]
def 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]
def timestamp #

Write the entry timestamp in RFC3339 format


[View source]