Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much

Re: Log4Perl across modules

by McA (Priest)
on Sep 13, 2013 at 10:29 UTC ( #1053882=note: print w/ replies, xml ) Need Help??

in reply to Log4Perl across modules


Log::Log4perl follows the singleton pattern. There is always one instance of that class representing the logging facility. With init you initialize it. So, the second init just does what you see, it overwrites the first initialisation. What you want is to add an appender to the initially created object. Therefore you have to look at the runtime methods provides to do that. Have a look at Log::Log4perl::FAQ which gives very much hints how to do it.

UPDATE: Have a look at


Comment on Re: Log4Perl across modules
Download Code
Replies are listed 'Best First'.
Re^2: Log4Perl across modules
by rbala (Acolyte) on Sep 13, 2013 at 13:25 UTC
    Thanks lot McA!! It seems to work in a test sample. I will proceed integrating it to my code. Thanks, Bala.
      Hi, The code works but the issue is even after I add appender file in my , it is logging only once until it is returned from the subrouting in the module. After that , whatever logging I put, it is appended to only the file , which I appended in script . Below is the code : -------
      use warnings; use strict; use Log::Log4perl qw(:easy); use TestModule; my $log_file = "GIVE SOME PATH"; my %key_value_pairs = ( "log4perl.rootLogger" => "DEBUG, Logfile,TestModule,Screen", "log4perl.appender.Logfile" => "Log::Log4perl::Appender::File", "log4perl.appender.Logfile.mode" => "clobber", "log4perl.appender.Logfile.filename" => "$log_file", "log4perl.appender.Logfile.layout"=> "Log::Log4perl::Layout::Patte +rnLayout", "log4perl.appender.Logfile.layout.ConversionPattern" => "%d %p %C: +%L> %m%n", "log4perl.appender.TestModule" => "Log::Log4perl::Appender::Fi +le", "log4perl.appender.TestModule.mode" => "clobber", "log4perl.appender.TestModule.filename" => "$log_file", "log4perl.appender.TestModule.layout"=> "Log::Log4perl::Layout +::PatternLayout", "log4perl.appender.TestModule.layout.ConversionPattern" => "%d %p +%C:%L> %m%n", "log4perl.appender.Screen" => "Log::Log4perl::Appender::Screen", "log4perl.appender.Screen.layout" => "Log::Log4perl::Layout::Patte +rnLayout", "log4perl.appender.Screen.layout.ConversionPattern" => "%d %p %C: +%L> %m%n", ); Log::Log4perl::init(\%key_value_pairs); my $testmodule = TestModule->new( "key" => "value", ); INFO "Creating object for testmodule"; $testmodule->_printTime(); ---------
      package TestModule; use Log::Log4perl qw(:easy); use strict; use warnings; sub new { my ($this,%params) = @_; my $args = { "arg1" => "5", "arg2" => "6", %params, }; bless($args,$this); my $log_file = "somepath"; my $new_log_file = "GIVE SOME PATH"; my $file_appender = Log::Log4perl::Appender->new( "Log::Log4perl::Appender::File", name => "TestModule", filename => "$new_log_file"); INFO "New object created"; return $args; } sub _printTime { my $time = localtime; INFO "$time"; } 1;

      Actually , I need both the files to be updated once a new appender is added.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1053882]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (6)
As of 2015-11-28 12:17 GMT
Find Nodes?
    Voting Booth?

    What would be the most significant thing to happen if a rope (or wire) tied the Earth and the Moon together?

    Results (741 votes), past polls