-
-
13 Jul 2021 11:04:13 UTC
- Distribution: XLog
- Source (raw)
- Pod Source (raw)
- Browse (raw)
- Changes
- How to Contribute
- Issues
- Testers (39 / 0 / 3)
- Kwalitee
Bus factor: 1- License: unknown
- Activity
24 month- Tools
- Download (22.6KB)
- MetaCPAN Explorer
- Permissions
- Subscribe to distribution
- Permalinks
- This version
- Latest version
- Dependencies
- Export::XS
- XS::Framework
- XS::Install
- XS::libpanda
- next::XS
- and possibly others
- Reverse dependencies
- CPAN Testers List
- Dependency graph
NAME
XLog::Module - logging module with separate settings
SYNPOSIS
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);
DESCRIPTION
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 whilelogic
still have WARNING as min level.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.{ 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 moduleaaa
and setting log level foraaa
also sets level forbbb
but not vice-versa. Child modules partially inherits names from their parents, so in this case the name of BBB module will beaaa::bbb
.Also modules support setting custom
logger
andformatter
. 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).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.To revert to default behaviour (inherit logger/formatter from parent) set them to
undef
$xlog_module->set_logger(undef); $xlog_module->set_formatter(undef);
METHODS
new($name, [$min_level=WARNING)
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.
new($name, $parent_module, [$min_level=WARNING])
Creates a module with
$parent_module
as its parent.$min_level
is minimal logging level for all logs written with this module.The name of the newly created module is its parent name plus the name of the module separated by "::"
If
$parent_module
isundef
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(...);
name()
Returns full module name
level()
Returns minimal log level for this module
set_level($new_min_level)
Sets minimal log level for this module and all of its children
set_logger($logger, [$passthrough = false])
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.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 presentset_formatter($formatter)
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.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).passthrough()
Returns true if
$passthrough
was set on lastset_logger
call to this module.Module Install Instructions
To install XLog, copy and paste the appropriate command in to your terminal.
cpanm XLog
perl -MCPAN -e shell install XLog
For more information on module installation, please visit the detailed CPAN module installation guide.