http://qs321.pair.com?node_id=479698

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

Hi Monks

I'm writing a module to have log messages written to a file (you may recall (or scroll down to) my other message below).

Now, everything's working fine but it would be somewhat cool if I could find out which package my log functions were called from to get log entries a la carp() or croak().
I know that there's __PACKAGE__ but that only gives me my own package.

Example:

package Logalizer::Output; use Logalizer::Log4Logalizer; # a lot of code sub doSomething { Logalizer::Log4Logalizer::logInfo ("This goes straight to the log +file."); }

Now, it would be nice if I could have log messages like:

[Sun Jul 31 12:03:30 2005] (in Logalizer::Output): This goes straight +to the log file.

or even:

[Sun Jul 31 12:03:30 2005] (in Logalizer::Output::doSomething()): This + goes straight to the log file.

I have a hunch that the Symbol modul might have something to offer but I have no clue how to implement that.
Any suggestions?

Thanks in advance!

SveTho

Replies are listed 'Best First'.
Re: Finding out calling package
by BrowserUk (Patriarch) on Jul 31, 2005 at 10:28 UTC

    Take a look at caller.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
    "Science is about questioning the status quo. Questioning authority".
    The "good enough" maybe good enough for the now, and perfection maybe unobtainable, but that should not preclude us from striving for perfection, when time, circumstance or desire allow.

      Good grief, I never knew that existed. But it's exactly what I need!

      Thank you.

      SveTho