Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister

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


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 all is quiet...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (3)
As of 2018-02-18 22:52 GMT
Find Nodes?
    Voting Booth?
    When it is dark outside I am happiest to see ...

    Results (257 votes). Check out past polls.