XLog::Module - logging module with separate settings
package NetworkLayer; our $xlog_module = XLog::Module->new("network"); ... XLog::debug($xlog_module, "data received: $raw_data"); package LogicLayer; our $xlog_module = XLog::Module->new("logic"); ... XLog::debug($xlog_module, "message: ".Dump($msg)); ... #somewhere $NetworkLayer::xlog_module->set_level(XLog::DEBUG); # or XLog::set_level(XLog::DEBUG, "network"); ... $NetworkLayer::xlog_module->set_logger(XLog::File->new({file => 'network.log'})); $NetworkLayer::xlog_module->set_formatter($formatter);
Log modules are used to separate logs of one part of the application from another. For example image you have network layer in your application and logic layer.
# network layer ... XLog::debug("data received: $raw_data"); #logic layer ... XLog::debug("message: ".Dump($msg)); ... #somewhere XLog::set_level(XLog::DEBUG);
You want to debug your network layer and enable debug logs but you don't want to enable debug logs everywhere across your app. In this case you can create 2 log modules, use it when logging and enable debug log only for certain log module.
package NetworkLayer; our $xlog_module = XLog::Module->new("network"); ... XLog::debug($xlog_module, "data received: $raw_data"); package LogicLayer; our $xlog_module = XLog::Module->new("logic"); ... XLog::debug($xlog_module, "message: ".Dump($msg)); ... #somewhere $NetworkLayer::xlog_module->set_level(XLog::DEBUG); # or XLog::set_level(XLog::DEBUG, "network");
Now min level DEBUG is only set for network log module while logic still have WARNING as min level.
network
logic
Module parameter to log functions can be omitted if variable's name holding log module is xlog_module and it is global and in the same package or lower package as logging code.
xlog_module
{ package MyApp; our $xlog_module = XLog::Module->new("myapp"); { package MyApp::Other; XLog::debug("hello"); # logging to myapp } { package MyApp::NetworkLayer; our $xlog_module = XLog::Module->new("network"); XLog::debug("hello"); # logging to network module } XLog::debug("hi"); # logging to myapp module } XLog::debug("hi"); # logging to root module
Modules can be organised in hierarchies (parent-child).
package AAA; our $xlog_module = XLog::Module->new("aaa"); package BBB; our $xlog_module = XLog::Module->new("bbb", $AAA::xlog_module);
In this case, module bbb is a child of module aaa and setting log level for aaa also sets level for bbb but not vice-versa. Child modules partially inherits names from their parents, so in this case the name of BBB module will be aaa::bbb.
bbb
aaa
aaa::bbb
Also modules support setting custom logger and formatter. By default, if none is set to any module, all modules will use logger/formatter from the root module (set via XLog::set_logger/set_formatter).
logger
formatter
If you set logger or formatter explicitly for some module
$xlog_module->set_logger($my_logger); $xlog_module->set_formatter($my_formatter);
then $xlog_module and all of its children will use logger/formatter provided.
$xlog_module
To revert to default behaviour (inherit logger/formatter from parent) set them to undef
undef
$xlog_module->set_logger(undef); $xlog_module->set_formatter(undef);
Creates a new module with root module as its parent. $min_level is minimal logging level for all logs written with this module. The default is .
$min_level
Creates a module with $parent_module as its parent. $min_level is minimal logging level for all logs written with this module.
$parent_module
The name of the newly created module is its parent name plus the name of the module separated by "::"
If $parent_module is undef then creates a new root module. Such module and its children will not react to XLog::set_level/set_logger/etc, but only to direct configuring.
$module->set_level(...); $module->set_logger(...);
Returns full module name
Returns minimal log level for this module
Sets minimal log level for this module and all of its children
Sets logger backend for this module. Logging that is done with this module or any of its children will use this logger unless some child has its own logger configured explicitly.
See XLog's set_logger for details on what $logger can be.
$logger
To revert to using parent's logger, just set it to undef.
$module->set_logger(undef);
Setting undef as logger for root module (module with no parent) disables logging for such module and its children except for child modules that has its own logger configured explicitly.
If $passthrough is set, after logging to this logger, will log also to parent's logger is if this logger wasn't present
$passthrough
Sets formatter for this module. Logging that is done with this module or any of its children will use this formatter unless some child has its own formatter configured explicitly.
See XLog's set_formatter for details on what $formatter can be.
$formatter
To revert to using parent's formatter, just set it to undef.
$module->set_formatter(undef);
Setting undef as formatter for root module (module with no parent) reverts to using default formatter (XLog::Formatter::Pattern with default pattern).
Returns true if $passthrough was set on last set_logger call to this module.
set_logger
To install XLog, copy and paste the appropriate command in to your terminal.
cpanm
cpanm XLog
CPAN shell
perl -MCPAN -e shell install XLog
For more information on module installation, please visit the detailed CPAN module installation guide.