in reply to Re: Passing the logger's object
in thread Passing the logger's object

Thank you for the comment!

So, you would suggest to pass the logger's reference to the class' initializer, right?

V.Melnik

Replies are listed 'Best First'.
Re^3: Passing the logger's object
by stevieb (Canon) on Nov 13, 2016 at 20:42 UTC

    Not always, but mostly I do. Whether using named params:

    my $obj = Module->new(log => $obj, arg1 => $arg1);

    or, positional (in this case, I typically have the log obj as the first parameter):

    my $obj = Module->new($log, $arg1, $arg2);

    ...and sometimes, I'll have the first arg as $self, then the log obj, then named params after that:

    my $obj = Module->new($log, %args);

    The new() method would look something like this internally in that case:

    sub new { my $self = shift; my $log_obj = shift; my %args = @_; # do stuff }

    You can also call the class method within your new() method, and stash it inside the object:

    sub new { my $self = bless {}, shift; $self->{log} = Library->log()->child('This::Module::Name'); my $log = $self->_log()->child('new'); } sub foo { my $self = shift; my $log = $self->_log()->child('foo'); # do fooish type stuff } sub _log { return shift->{log}; }