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

Instance methods inherited from struct Struct

==(other) : Bool ==, hash(hasher) hash, inspect(io : IO) : Nil inspect, pretty_print(pp) : Nil pretty_print, to_s(io : IO) : Nil to_s

Instance methods inherited from struct Value

==(other : JSON::Any)
==(other : YAML::Any)
==(other)
==
, dup dup

Instance methods inherited from class Object

! : Bool !, !=(other) !=, !~(other) !~, ==(other) ==, ===(other : JSON::Any)
===(other : YAML::Any)
===(other)
===
, =~(other) =~, as(type : Class) as, as?(type : Class) as?, class class, dup dup, hash(hasher)
hash
hash
, in?(collection : Object) : Bool
in?(*values : Object) : Bool
in?
, inspect(io : IO) : Nil
inspect : String
inspect
, is_a?(type : Class) : Bool is_a?, itself itself, nil? : Bool nil?, not_nil!(message)
not_nil!
not_nil!
, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, responds_to?(name : Symbol) : Bool responds_to?, tap(&) tap, to_json(io : IO) : Nil
to_json : String
to_json
, to_pretty_json(indent : String = " ") : String
to_pretty_json(io : IO, indent : String = " ") : Nil
to_pretty_json
, to_s(io : IO) : Nil
to_s : String
to_s
, to_yaml(io : IO) : Nil
to_yaml : String
to_yaml
, try(&) try, unsafe_as(type : T.class) forall T unsafe_as

Class methods inherited from class Object

from_json(string_or_io, root : String)
from_json(string_or_io)
from_json
, from_yaml(string_or_io : String | IO) from_yaml

Constructor Detail

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

[View source]

Class Method Detail

def self.format(entry, io) : Nil #

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


[View source]

Instance Method Detail

def 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]
def 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.


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


[View source]
def message : Nil #

Write the message of the entry


[View source]
def pid(*, before = '#', after = nil) #

Write the current process identifier


[View source]
def progname : Nil #

Write the program name. See Log.progname.


[View source]
abstract def run #

Subclasses must implement this method to define the output pattern


[View source]
def severity : Nil #

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 string(str) : Nil #

Write a fixed string


[View source]
def timestamp : Nil #

Write the entry timestamp in RFC3339 format


[View source]