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

Direct Known Subclasses

Defined in:

log/format.cr

Constructors

Class Method Summary

Instance Method Summary

Constructor Detail

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

Class Method Detail

def self.format(entry, io) : NilSource

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

Instance Method Detail

def context(*, before = nil, after = nil)Source

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.

def data(*, before = nil, after = nil) : NilSource

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.

def exception(*, before = '\n', after = nil) : NilSource

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

def message : NilSource

Write the message of the entry

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

Write the current process identifier

def progname : NilSource

Write the program name. See Log.progname.

abstract def runSource

Subclasses must implement this method to define the output pattern

def severity : NilSource

Write the severity

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

def source(*, before = nil, after = nil)Source

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

def string(str) : NilSource

Write a fixed string

def timestamp : NilSource

Write the entry timestamp in RFC3339 format

© 2012–2021 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
https://crystal-lang.org/api/1.2.1/Log/StaticFormatter.html