Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Anybody help with this, please?

I created a wrapper package (say Mylog) around Log4perl and mirrored all the Log4perl functions in that package: debug, info, warn, error, etc.

To make the logging easy to use, I used Exporter to export all the Mylog functions (instead of having to call Mylog::debug, etc.). The problem, then, is with warn() - if I just call warn(), then the built-in warn will be called...

Is there any way to get around this, or should I just change the name of this function in Mylog? Or always use Mylog::func or even change the logging funcs to be mylog_debug, mylog_warn, etc. What's the best/correct approach?

#!/usr/bin/perl use strict; use warnings; use Mylog qw/mylog_init debug info warn error fatal logwarn logdie/; debug("just a test... - debug\n"); warn("just a test... - warn\n"); # I guess this will always call th +e built-in... info("just a test... - info\n");

Thanks

Replies are listed 'Best First'.
Re: Log4perl & warn
by goldclaw (Scribe) on Sep 15, 2005 at 12:10 UTC
    Have you tried to just import warn?

    AFAIK, importing a sub will override the builtin one. If you then want to get at the builtin warn, you can use CORE::warn().

      I'm importing warn like this:
      use Mylog qw/mylog_init debug info warn error fatal logwarn logdie/;

      On this version of perl: v5.8.0 built for i386-linux-thread-multi, this doesn't seem to override the built-in function...

        Intresting, this works for me on the same platform. Can it be something wrong with your Mylog package? This is what I tested it with:

        In Mylog.pm:

        package Mylog; use base qw(Exporter); our @EXPORT_OK=qw(warn test); sub warn{ print "My warn ", @_, "\n"; } 1;
        And in t.pl:
        #!/usr/bin/perl package main; use strict; use warnings; use Mylog qw/warn/; warn("just a test... - warn\n");
        Running t.pl, I then get:
        [skaark@dhcp-253-59 ~]$ perl t.pl My warn just a test... - warn
        I cant really help you out much more unless you show me the contents of your Mylog.pm file. I'm guessing the problem is somehow in there.... gc