// // Copyright (c) 2006, Brian Frank and Andy Frank // Licensed under the Academic Free License version 3.0 // // History: // 3 Jul 06 Brian Frank Creation // 21 Dec 07 Brian Frank Revamp // ** ** Log provides a simple, but standardized mechanism for logging. ** ** See `docLang::Logging` for details and [examples]`examples::sys-logging`. ** const class Log { ////////////////////////////////////////////////////////////////////////// // Factory ////////////////////////////////////////////////////////////////////////// ** ** Return a list of all the active logs which ** have been registered since system startup. ** static Log[] list() ** ** Find a registered log by name. If the log doesn't exist and ** checked is false then return null, otherwise throw Err. ** static Log? find(Str name, Bool checked := true) ** ** Find an existing registered log by name or if not found then ** create a new registered Log instance with the given name. ** Name must be valid according to `Uri.isName` otherwise ** NameErr is thrown. ** static Log get(Str name) ** ** Create a new log by name. The log is added to the VM log registry ** only if 'register' is true. If register is true and a log has already ** been created for the specified name then throw ArgErr. Name must ** be valid according to `Uri.isName` otherwise NameErr is thrown. ** new make(Str name, Bool register) ////////////////////////////////////////////////////////////////////////// // Methods ////////////////////////////////////////////////////////////////////////// ** ** Return name of the log. ** Str name() ** ** Return name. ** override Str toStr() ////////////////////////////////////////////////////////////////////////// // Severity Level ////////////////////////////////////////////////////////////////////////// ** ** The log level field defines which log entries are reported ** versus ignored. Anything which equals or is more severe than ** the log level is logged. Anything less severe is ignored. ** If the level is set to silent, then logging is disabled. ** LogLevel level ** ** Return if this log is enabled for the specified level. ** Bool isEnabled(LogLevel level) ** ** Return if error level is enabled. ** Bool isErr() ** ** Return if warn level is enabled. ** Bool isWarn() ** ** Return if info level is enabled. ** Bool isInfo() ** ** Return if debug level is enabled. ** Bool isDebug() ////////////////////////////////////////////////////////////////////////// // Logging ////////////////////////////////////////////////////////////////////////// ** ** Generate a `LogLevel.err` log entry. ** Void err(Str msg, Err? err := null) ** ** Generate a `LogLevel.warn` log entry. ** Void warn(Str msg, Err? err := null) ** ** Generate a `LogLevel.info` log entry. ** Void info(Str msg, Err? err := null) ** ** Generate a `LogLevel.debug` log entry. ** Void debug(Str msg, Err? err := null) ** ** Publish a log entry. The convenience methods `err`, `warn` ** `info`, and `debug` all route to this method for centralized ** handling. The standard implementation is to call each of the ** installed `handlers` if the specified level is enabled. ** virtual Void log(LogRec rec) ////////////////////////////////////////////////////////////////////////// // Handlers ////////////////////////////////////////////////////////////////////////// ** ** List all the handler functions installed to process log events. ** static |LogRec rec|[] handlers() ** ** Install a handler to receive callbacks on logging events. ** If the handler func is not immutable, then throw NotImmutableErr. ** static Void addHandler(|LogRec rec| handler) ** ** Uninstall a log handler. ** static Void removeHandler(|LogRec rec| handler) }