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

Introduced properties

type OUT: Writer

logger :: Logger :: OUT

Kind of Writer used to output messages
fun add(level: Int, message: Writable, formatter: nullable Formatter): Bool

logger :: Logger :: add

Output a message with level severity
fun add_raw(level: Int, message: Writable): Bool

logger :: Logger :: add_raw

Output a message with level severity without formatting it
fun debug(message: String, formatter: nullable Formatter): Bool

logger :: Logger :: debug

Output a message with debug severity
fun default_formatter: nullable Formatter

logger :: Logger :: default_formatter

Formatter used to format messages before outputting them
fun default_formatter=(default_formatter: nullable Formatter)

logger :: Logger :: default_formatter=

Formatter used to format messages before outputting them
init defaultinit(level: nullable Int, out: nullable OUT, default_formatter: nullable Formatter)

logger :: Logger :: defaultinit

fun error(message: String, formatter: nullable Formatter): Bool

logger :: Logger :: error

Output a message with error_level severity
fun fatal(message: String, formatter: nullable Formatter): Bool

logger :: Logger :: fatal

Output a message with fatal_level severity
fun info(message: String, formatter: nullable Formatter): Bool

logger :: Logger :: info

Output a message with info_level severity
fun level: Int

logger :: Logger :: level

Severity threshold
fun level=(level: nullable Int)

logger :: Logger :: level=

Severity threshold
fun out: OUT

logger :: Logger :: out

Writer used to output messages
protected fun out=(out: nullable OUT)

logger :: Logger :: out=

Writer used to output messages
fun unknown(message: String, formatter: nullable Formatter): Bool

logger :: Logger :: unknown

Output a message with unknown_level severity
fun warn(message: String, formatter: nullable Formatter): Bool

logger :: Logger :: warn

Output a message with warn_level severity

Redefined properties

redef type SELF: Logger

logger $ Logger :: SELF

Type of this instance, automatically specialized in every class

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type OUT: Writer

logger :: Logger :: OUT

Kind of Writer used to output messages
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
fun add(level: Int, message: Writable, formatter: nullable Formatter): Bool

logger :: Logger :: add

Output a message with level severity
fun add_raw(level: Int, message: Writable): Bool

logger :: Logger :: add_raw

Output a message with level severity without formatting it
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
fun debug(message: String, formatter: nullable Formatter): Bool

logger :: Logger :: debug

Output a message with debug severity
fun default_formatter: nullable Formatter

logger :: Logger :: default_formatter

Formatter used to format messages before outputting them
fun default_formatter=(default_formatter: nullable Formatter)

logger :: Logger :: default_formatter=

Formatter used to format messages before outputting them
init defaultinit(level: nullable Int, out: nullable OUT, default_formatter: nullable Formatter)

logger :: Logger :: defaultinit

fun error(message: String, formatter: nullable Formatter): Bool

logger :: Logger :: error

Output a message with error_level severity
fun fatal(message: String, formatter: nullable Formatter): Bool

logger :: Logger :: fatal

Output a message with fatal_level severity
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun hash: Int

core :: Object :: hash

The hash code of the object.
fun info(message: String, formatter: nullable Formatter): Bool

logger :: Logger :: info

Output a message with info_level severity
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
fun level: Int

logger :: Logger :: level

Severity threshold
fun level=(level: nullable Int)

logger :: Logger :: level=

Severity threshold
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun out: OUT

logger :: Logger :: out

Writer used to output messages
protected fun out=(out: nullable OUT)

logger :: Logger :: out=

Writer used to output messages
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
fun unknown(message: String, formatter: nullable Formatter): Bool

logger :: Logger :: unknown

Output a message with unknown_level severity
fun warn(message: String, formatter: nullable Formatter): Bool

logger :: Logger :: warn

Output a message with warn_level severity
package_diagram logger::Logger Logger core::Object Object logger::Logger->core::Object logger::FileLogger FileLogger logger::FileLogger->logger::Logger popcorn::PopLogger PopLogger popcorn::PopLogger->logger::Logger

Parents

interface Object

core :: Object

The root of the class hierarchy.

Children

class FileLogger

logger :: FileLogger

Log messages to a file
class PopLogger

popcorn :: PopLogger

Display log info about request processing.

Class definitions

logger $ Logger
# 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