NAME
Log::ger::For::Package - Add logging to package
VERSION
This document describes version 0.005 of Log::ger::For::Package (from Perl distribution Log-ger-For-Class), released on 2021-06-14.
SYNOPSIS
Add log to some existing packages (in other words, modules that are already loaded):
use Foo;
use Bar;
use Log::ger::For::Package qw(Foo Bar);
...
Now calls to your module functions are logged, by default at level 'trace'. To see the logs, use e.g. Log::ger::Output::Screen in command-line:
% TRACE=1 perl -MLog::ger::Output=Screen -MFoo -MBar -MLog::ger::For::Package=Foo,Bar \
-e'Foo::func(1, 2, 3)'
---> Foo::func([1, 2, 3])
---> Bar::nested()
<--- Bar::nested()
<--- Foo::func() = 'result'
To log only certain functions:
% TRACE=1 perl -MLog::ger::Output=Screen -MFoo -MBar -MLog::ger::For::Package=-filter_subs,'/sub1|sub3/',Foo,Bar ...
Use add_logging_to_package() which gives more options, e.g. to add log to multiple packages specified by regex:
use Log::ger::For::Package qw(add_logging_to_package);
add_logging_to_package(packages => [qw/Foo::.*/]);
To install an import (@INC) hook so that subsequent modules loaded will be logged:
add_logging_to_package(packages => [...], import_hook=>1);
or, via import:
% TRACE=1 perl -MLog::ger::Output=Screen -MLog::ger::For::Package=-hook,1,.* ...
FUNCTIONS
add_logging_to_package
Usage:
add_logging_to_package(%args) -> any
Add logging to package.
Logging will be done using Log::ger.
Currently this function adds logging around function calls, e.g.:
---> Package::func(ARGS)
<--- Package::func() = RESULT
...
This function is not exported.
Arguments ('*' denotes required arguments):
filter_subs => re|code
Filter subroutines to add logging to.
The default is to read from environment
LOG_PACKAGE_INCLUDE_SUB_REandLOG_PACKAGE_EXCLUDE_SUB_RE(these should contain regex that will be matched against fully-qualified subroutine/method name), or, if those environment are undefined, add logging to all non-private subroutines (private subroutines are those prefixed by_). For example.import_hook => bool (default: 0)
Whether to install import (@INC) hook instead.
If this setting is true, then instead of installing logging to all existing packages, an @INC import hook will be installed instead so that subsequent modules that are loaded and that match
packageswill be logged. So to log all subsequent loaded modules, you can setpackagesto['.*'].logger_args => any
Pass arguments to logger.
This allows passing arguments to logger routine.
packages* => array[str]
Packages to add logging to.
Each element can be the name of a package or a regex pattern (any non-valid package name will be regarded as a regex). If the package is (comes from) a module, the module must already be loaded. This function will not load modules for you.
postcall_logger => code
Supply custom postcall logger.
Just like
precall_logger, but code will be called after subroutine/method is called. Code will be given a hashref argument \%args containing these keys:args(arrayref, a shallow copy of the original @_),orig(coderef, the original subroutine/method),name(string, the fully-qualified subroutine/method name),result(arrayref, the subroutine/method result),logger_args(arguments given when adding logging).You can use this mechanism to customize logging.
precall_logger => code
Supply custom precall logger.
Code will be called when logging subroutine/method call. Code will be given a hashref argument \%args containing these keys:
args(arrayref, a shallow copy of the original @_),orig(coderef, the original subroutine/method),name(string, the fully-qualified subroutine/method name),logger_args(arguments given when adding logging).You can use this mechanism to customize logging.
The default logger accepts these arguments (can be supplied via
logger_args):indent=> INT (default: 0)
Indent according to nesting level.
max_depth=> INT (default: -1)
Only log to this nesting level. -1 means unlimited.
log_sub_args=> BOOL (default: 1)
Whether to display subroutine arguments when logging subroutine entry. The default can also be supplied via environment
LOG_SUB_ARGS.log_sub_result=> BOOL (default: 1)
Whether to display subroutine result when logging subroutine exit. The default can also be set via environment
LOG_SUB_RESULT.
Return value: (any)
FAQ
How do I know that logging has been added to a package?
Log::ger::For::Package logs a trace statement like this after it added logging to a package:
Added logging to package Foo (subs ["sub1","sub2",...])
ENVIRONMENT
LOG_PACKAGE_INCLUDE_SUB_RE (str)
LOG_PACKAGE_EXCLUDE_SUB_RE (str)
LOG_SUB_ARGS (bool)
LOG_SUB_RESULT (bool)
HOMEPAGE
Please visit the project's homepage at https://metacpan.org/release/Log-ger-For-Class.
SOURCE
Source repository is at https://github.com/perlancar/perl-Log-ger-For-Class.
BUGS
Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=Log-ger-For-Class
When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.
SEE ALSO
For some modules, use the appropriate Log::ger::For::*, for example: Log::ger::For::DBI, Log::ger::For::LWP.
CREDITS
Some code portion taken from Devel::TraceMethods.
AUTHOR
perlancar <perlancar@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2021, 2019, 2017 by perlancar@cpan.org.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.