NAME
Net::CLI::Interact::Logger - Per-instance multi-target logging, with categories
SYNOPSIS
$logger
->
log
(
$category
,
$level
,
@message
);
DESCRIPTION
This module implements a generic logging service, based on Log::Dispatch but with additional options and configuration. Log messages coming from your application are categorized, and each category can be enabled/disabled separately and have its own log level (i.e. emergency
.. debug
). High resolution timestamps can be added to log messages.
DEFAULT CONFIGURATION
Being based on Log::Dispatch::Config, this logger can have multiple targets, each configured for independent level thresholds. The overall default configuration is to print log messages to the screen (console), with a minimum level of debug
. Each category (see below) has its own log level as well.
Note that categories, as discussed below, are arbitrary so if a category is not explicitly enabled or disabled, it is assumed to be disabled. If you wish to invent a new category for your application, simply think of the name and begin to use it, with a $level
and @message
as above in the SYNOPSIS.
INTERFACE
log( $category, $level, @message )
The combination of category and level determine whether the the log messages are emitted to any of the log destinations. Destinations are set using the log_config
method, and categories are configured using the log_flags
method.
The @message
list will be joined by a space character, and a newline appended if the last message doesn't contain one itself. Messages are prepended with the first character of their $category
, and then indented proportionally to their $level
.
log_config( \%config )
A Log::Dispatch::Config
configuration (hash ref), meaning multiple log targets may be specified with different minimum level thresholds. There is a default configuration which emits messages to your screen (console) with no minimum threshold:
{
dispatchers
=> [
'screen'
],
screen
=> {
class
=>
'Log::Dispatch::Screen'
,
min_level
=>
'debug'
,
},
};
log_flags( \@categories | \%category_level_map )
The user is expected to specify which log categories they are interested in, and at what levels. If a category is used in the application for logging but not specified, then it is deemed disabled. Hence, even though the default destination log level is debug
, no messages are emitted until a category is enabled.
In the array reference form, the list should contain category names, and they will all be mapped to the error
level:
$logger
->log_flags([
qw/
network
disk
io
cpu
/
]);
In the hash reference form, the keys should be category names and the values log levels from the list below (ordered such that each level "includes" the levels above):
emergency
alert
critical
error
warning
notice
info
debug
For example:
$logger
->log_flags({
network
=>
'info'
,
disk
=>
'debug'
,
io
=>
'critical'
,
cpu
=>
'debug'
,
});
Messages at or above the specified level will be passed on to the Log::Dispatch
target, which may then specify an overriding threshold.
Net::CLI::Interact-
default_log_categories() >>
Not a part of this class, but the only way to retrieve a list of the current log categories used in the Net::CLI::Interact distribution source. Does not take into account any log categories added by the user.
log_stamp( $boolean )
Enable (the default) or disable the display of high resolution interval timestamps with each log message.
log_category( $boolean )
Enable (the default) or disable the display of the first letters of the category name with each log message.
log_start( [$seconds, $microseconds] )
Time of the start for generating a time interval when logging stamps. Defaults to the result of Time::HiRes::gettimeofday
at the point the module is loaded, in list context.
would_log( $category, $level )
Returns True if, according to the current log_flags
, the given $category
is enabled at or above the threshold of $level
, otherwise returns False. Note that the Log::Dispatch
targets maintain their own thresholds as well.