NAME
MooX::Role::HasLogger - Moo role that provides a logger attribute
SYNOPSIS
package Foo;
use Moo;
use MooX::TypeTiny;
use namespace::clean;
with qw( MooX::Role::HasLogger );
sub bar {
my ( $self ) = @_;
$self->logger->info( 'log something' );
}
1;
DESCRIPTION
This Moo::Role based role provides a logger
attribute to the consuming class. The attribute is read-only and its value is grabbed lazily. The type library MooX::Role::HasLogger::Types exports the Logger
type that defines the interface of the attribute. The build_logger()
builder method returns a Log::Any logger object with the consuming class as its category.
EXAMPLE
This extended example
package Bar;
use Moo;
use MooX::TypeTiny;
use Types::Standard qw( HasMethods );
use MooX::Role::HasLogger::Types qw( Logger );
use namespace::clean;
with qw( MooX::Role::HasLogger );
has '+logger' => ( isa => ( Logger ) & ( HasMethods [ qw( tracef debugf infof warnf errorf fatalf ) ] ) );
sub build_logger {
return Log::Any->get_logger( category => ref shift, default_adapter => 'Stderr' );
}
1;
shows
how to override the
isa
option of thelogger
attribute using the+
notation.how to extend the
Logger
type using a Type::Tiny intersection. Now a logger has to be an object of a class that implements theLogger
type methods and additionally thef
suffixed log methods.how to override the
build_logger()
builder method. This time the builder returns a Log::Any logger object with the consuming class as its category and with a default adapter that refers to the Log::Any::Adapter::Stderr adapter class.
SEE ALSO
AUTHOR
Sven Willenbuecher <sven.willenbuecher@gmx.de>
COPYRIGHT AND LICENSE
This software is copyright (c) 2023 by Sven Willenbuecher.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.