Logger
provides a simple way to output messages from applications.
Each message is associated with a level that indicate its severity.
Only messages with a severity equal to or higher than the logger level
threshold will be displayed.
var logger = new Logger(warn_level)
assert logger.unknown("unkown")
assert logger.fatal("fatal")
assert logger.error("error")
assert logger.warn("warn")
assert not logger.info("info")
assert not logger.debug("debug")
logger :: Logger :: default_formatter
Formatter used to format messages before outputting themlogger :: Logger :: default_formatter=
Formatter used to format messages before outputting themlogger :: Logger :: defaultinit
core :: Object :: class_factory
Implementation used byget_class
to create the specific class.
logger :: Logger :: default_formatter
Formatter used to format messages before outputting themlogger :: Logger :: default_formatter=
Formatter used to format messages before outputting themcore :: Object :: defaultinit
logger :: Logger :: defaultinit
core :: Object :: is_same_instance
Return true ifself
and other
are the same instance (i.e. same identity).
core :: Object :: is_same_serialized
Isself
the same as other
in a serialization context?
core :: Object :: is_same_type
Return true ifself
and other
have the same dynamic type.
core :: Object :: output_class_name
Display class name on stdout (debug only).
# A simple logging utility
#
# `Logger` provides a simple way to output messages from applications.
#
# Each message is associated with a level that indicate its severity.
# Only messages with a severity equal to or higher than the logger `level`
# threshold will be displayed.
#
# ~~~
# var logger = new Logger(warn_level)
# assert logger.unknown("unkown")
# assert logger.fatal("fatal")
# assert logger.error("error")
# assert logger.warn("warn")
# assert not logger.info("info")
# assert not logger.debug("debug")
# ~~~
class Logger
# Severity threshold
#
# Messages with a severity level greater than or equal to `level` will be displayed.
# Default is `warn_level`.
#
# See `unknown_level`, `fatal_level`, error_level``, `warn_level`,
# `info_level` and `debug_level`.
var level: Int = warn_level is optional, writable
# Kind of `Writer` used to output messages
type OUT: Writer
# Writer used to output messages
#
# Default is `stderr`.
var out: OUT = stderr is optional
# Formatter used to format messages before outputting them
#
# By default no formatter is used.
#
# See `DefaultFormatter`.
var default_formatter: nullable Formatter = null is optional, writable
# Output a message with `level` severity
#
# Only output messages with `level` severity greater than of equal to `self.level`.
#
# ~~~
# var stderr = new StringWriter
# var logger = new Logger(warn_level, stderr, null)
#
# # This message will be displayed:
# assert logger.warn("This is a warning.")
# assert stderr.to_s.trim.split("\n").last == "This is a warning."
#
# # This message will not:
# assert not logger.info("This is some info.")
# assert stderr.to_s.trim.split("\n").last == "This is a warning."
# ~~~
#
# Each logger can be given a default formatter used to format the messages
# before outputting them:
#
# ~~~
# var formatter = new DefaultFormatter(no_color = true)
# logger = new Logger(warn_level, stderr, formatter)
# logger.warn("This is a warning.")
# assert stderr.to_s.trim.split("\n").last == "Warning: This is a warning."
# ~~~
#
# Optionally, a `Formatter` can be given to replace the `default_formatter`
# used by default.
#
# ~~~
# # Create a formatter with no default decorator
# logger = new Logger(warn_level, stderr, null)
#
# # Display a message without any formatter
# logger.warn("This is a warning.")
# assert stderr.to_s.trim.split("\n").last == "This is a warning."
#
# # Display a message with a custom formatter
# logger.warn("This is a warning.", formatter)
# assert stderr.to_s.trim.split("\n").last == "Warning: This is a warning."
# ~~~
fun add(level: Int, message: Writable, formatter: nullable Formatter): Bool do
var format = formatter or else default_formatter
if format == null then
return add_raw(level, message)
end
return add_raw(level, format.format(level, message))
end
# Output a message with `level` severity without formatting it
#
# Only output messages with `level` severity greater than of equal to `self.level`.
#
# ~~~
# var stderr = new StringWriter
# var logger = new Logger(warn_level, stderr, null)
#
# # This message will be displayed:
# assert logger.add_raw(warn_level, "This is a warning.")
# assert stderr.to_s.trim.split("\n").last == "This is a warning."
#
# # This message will not:
# assert not logger.add_raw(info_level, "This is some info.")
# assert stderr.to_s.trim.split("\n").last == "This is a warning."
# ~~~
fun add_raw(level: Int, message: Writable): Bool do
if level < self.level then return false
out.write(message.write_to_string)
out.write("\n")
return true
end
# Output a message with `unknown_level` severity
#
# Unkown severity messages are always outputted.
fun unknown(message: String, formatter: nullable Formatter): Bool do
return add(unknown_level, message, formatter)
end
# Output a message with `fatal_level` severity
fun fatal(message: String, formatter: nullable Formatter): Bool do
return add(fatal_level, message, formatter)
end
# Output a message with `error_level` severity
fun error(message: String, formatter: nullable Formatter): Bool do
return add(error_level, message, formatter)
end
# Output a message with `warn_level` severity
fun warn(message: String, formatter: nullable Formatter): Bool do
return add(warn_level, message, formatter)
end
# Output a message with `info_level` severity
fun info(message: String, formatter: nullable Formatter): Bool do
return add(info_level, message, formatter)
end
# Output a message with `debug` severity
fun debug(message: String, formatter: nullable Formatter): Bool do
return add(debug_level, message, formatter)
end
end
lib/logger/logger.nit:115,1--262,3