You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(3) |
Aug
(38) |
Sep
(126) |
Oct
(23) |
Nov
(72) |
Dec
(36) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(76) |
Feb
(32) |
Mar
(19) |
Apr
(6) |
May
(54) |
Jun
(40) |
Jul
(45) |
Aug
(35) |
Sep
(51) |
Oct
(67) |
Nov
(10) |
Dec
(50) |
2004 |
Jan
(51) |
Feb
(22) |
Mar
(22) |
Apr
(28) |
May
(53) |
Jun
(99) |
Jul
(38) |
Aug
(49) |
Sep
(23) |
Oct
(29) |
Nov
(30) |
Dec
(48) |
2005 |
Jan
(15) |
Feb
(21) |
Mar
(25) |
Apr
(16) |
May
(131) |
Jun
|
Jul
(8) |
Aug
(5) |
Sep
(15) |
Oct
|
Nov
(15) |
Dec
(12) |
2006 |
Jan
(15) |
Feb
(20) |
Mar
(8) |
Apr
(10) |
May
(3) |
Jun
(16) |
Jul
(15) |
Aug
(11) |
Sep
(17) |
Oct
(27) |
Nov
(11) |
Dec
(12) |
2007 |
Jan
(19) |
Feb
(18) |
Mar
(33) |
Apr
(4) |
May
(15) |
Jun
(22) |
Jul
(19) |
Aug
(20) |
Sep
(14) |
Oct
(4) |
Nov
(34) |
Dec
(11) |
2008 |
Jan
(8) |
Feb
(18) |
Mar
(2) |
Apr
(4) |
May
(26) |
Jun
(9) |
Jul
(8) |
Aug
(8) |
Sep
(3) |
Oct
(17) |
Nov
(14) |
Dec
(4) |
2009 |
Jan
(6) |
Feb
(41) |
Mar
(21) |
Apr
(10) |
May
(21) |
Jun
|
Jul
(8) |
Aug
(4) |
Sep
(3) |
Oct
(8) |
Nov
(6) |
Dec
(5) |
2010 |
Jan
(14) |
Feb
(13) |
Mar
(7) |
Apr
(12) |
May
(4) |
Jun
(1) |
Jul
(11) |
Aug
(5) |
Sep
|
Oct
(1) |
Nov
(10) |
Dec
|
2011 |
Jan
(7) |
Feb
(3) |
Mar
(1) |
Apr
(5) |
May
|
Jun
(1) |
Jul
(6) |
Aug
(6) |
Sep
(10) |
Oct
(5) |
Nov
(4) |
Dec
(5) |
2012 |
Jan
(4) |
Feb
(5) |
Mar
(1) |
Apr
(7) |
May
(1) |
Jun
|
Jul
(2) |
Aug
|
Sep
(5) |
Oct
(5) |
Nov
(4) |
Dec
(5) |
2013 |
Jan
(6) |
Feb
|
Mar
(14) |
Apr
(9) |
May
(3) |
Jun
(2) |
Jul
(1) |
Aug
(1) |
Sep
|
Oct
|
Nov
(4) |
Dec
(6) |
2014 |
Jan
|
Feb
(1) |
Mar
(10) |
Apr
|
May
(3) |
Jun
|
Jul
|
Aug
|
Sep
(4) |
Oct
(1) |
Nov
|
Dec
(4) |
2015 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
From: Berg, E. <eri...@le...> - 2007-06-29 00:33:25
|
I do store it in my app, but I've set up my wrapper to look for an environment variable first, then a local whatever.ini, and then a full path to the default. I am trying to work with my other developers to initialize =22properly=22, but sometimes they don't and when that happens, it often leads to a search for which config file is being read. It's not an insurmountable problem, but knowing whence cometh the config would be nice. This is particularly an issue when they go outside of the parameters for getting configs from my wrapper class. None of my modules (underlying data and business logic) even include (use) Log::Log4perl; it's all from whatever script uses them. Are there any best practices, examples, etc. for the best way to provide a wrapper to log? I'm using some of the sample code that provides a _get_logger() function that derives the category based on the package from which it's called, but I've created a problem for myself when it's in an inherited class in a subclass called in a subclass -- my wrapper is set up to provide _get_logger() as an inherited method -- because if I define a method in a superclass, and it's called in a subclass, then I can't just enable logging for the method in the superclass, because it's the package name of the subclass from which the category is derived. So, to reiterate, I have a class hierarchy, and the top-level class is the one that does a=20 use base qw(My::Logger); Then, when one of my subclasses calls _get_logger(), it creates a logger with the category of the subclass, whereas at least sometimes I want to enable logging for that inherited method whenever it's called. Another solution would be wildcard/regex categories. Can we do that? Thanks=21 -Eric. -----Original Message----- From: Mike Schilli =5Bmailto:m=40perlmeister.com=5D=20 Sent: Thursday, June 28, 2007 7:54 PM To: Berg, Eric Cc: log4perl-devel=40lists.sourceforge.net Subject: Re: =5Blog4perl-devel=5D When a missing config file On Thu, 28 Jun 2007, Berg, Eric wrote: > I've been looking for a way to get l4p to tell me where the config=20 > under which it's running comes from. Essentially, I'd like to have a=20 > method that would return the full path to the config file that it's=20 > currently using. > > Obviously, there are complications, such as those relating to=20 > programatic configuration subsequent to loading configs from a file,=20 > in-line, and config (ini) files, but I could find nowhere that the=20 > file name passed in to init() is retrievable. The name of the file isn't stored usually, since you can not only use a file but a string, a hashref, an URL, etc. to initialize L4p. Since you're calling init() in the first place, wouldn't it be easier to store the filename in your application instead? -- Mike Mike Schilli m=40perlmeister.com > > -Eric. > > -----Original Message----- > From: log4perl-devel-bounces=40lists.sourceforge.net > =5Bmailto:log4perl-devel-bounces=40lists.sourceforge.net=5D On Behalf = Of=20 > John ORourke > Sent: Thursday, June 28, 2007 6:42 AM > To: Lee Goddard > Cc: log4perl-devel=40lists.sourceforge.net > Subject: Re: =5Blog4perl-devel=5D When a missing config file > > Try putting: > > use Error; > > in one of your modules/scripts - it will override the warn/die=20 > handlers globally, so unless Log4perl overrides them again it will=20 > give you a stack trace. > > cheers > John > > Lee Goddard wrote: > > > > Please could Log/Log4perl/Config.pm line 619 offer a stack backtrace > > as well as barfing? > > > > My current project has four config files, several potential=20 > > initialisers (bad idea, I know) and reports only via e-mail, since=20 > > it is part of a MTA process. > > > > Thanks in anticipation > > > > Lee > > > > > > > > > > > > =23 The Postfix program > > > > =23 > > > > =23 <tqm=40uk-sandbox.corp.advertising.com>: Command died with status 2: > > =22perl > > > > =23 -I/home/lgoddard/trafficjam/trunk/lib > > -MTrafficJam::Controller::Root -e > > > > =23 'warn TrafficJam::Controller::Root->mail_in'=22. Command output: > > Cannot open > > > > =23 config file '/home/lgoddard/trafficjam/trunk/config/mail.l4p' at > > > > =23 /usr/local/share/perl/5.8.4/Log/Log4perl/Config.pm line 619, > > <STDIN> line > > > > =23 26. > > > > =23 > > > > > > > > Lee Goddard > > > > Senior Software Developer > > > > Advertising.com, London > > > > > > > > P Think of the environment before you print this email > > > > > > > > -------------------------------------------------------------------- > > -- > > -- > > > > -------------------------------------------------------------------- > > -- > > --- This SF.net email is sponsored by DB2 Express Download DB2=20 > > Express > > > C - the FREE version of DB2 express and take control of your XML. No > > limits. Just data. Click to get it now. > > http://sourceforge.net/powerbar/db2/ > > -------------------------------------------------------------------- > > -- > > -- > > > > _______________________________________________ > > log4perl-devel mailing list > > log4perl-devel=40lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/log4perl-devel > > > > > ---------------------------------------------------------------------- > -- > - > This SF.net email is sponsored by DB2 Express Download DB2 Express C - > the FREE version of DB2 express and take control of your XML. No limits. > Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > log4perl-devel mailing list > log4perl-devel=40lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/log4perl-devel > > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -=20 > - - - - - - - - - > > This message is intended only for the personal and confidential use of the designated recipient(s) named above. If you are not the intended recipient of this message you are hereby notified that any review, dissemination, distribution or copying of this message is strictly prohibited. This communication is for information purposes only and should not be regarded as an offer to sell or as a solicitation of an offer to buy any financial product, an official confirmation of any transaction, or as an official statement of Lehman Brothers. Email transmission cannot be guaranteed to be secure or error-free. Therefore, we do not represent that this information is complete or accurate and it should not be relied upon as such. All information is subject to change without notice. > > -------- > IRS Circular 230 Disclosure: > Please be advised that any discussion of U.S. tax matters contained within this communication (including any attachments) is not intended or written to be used and cannot be used for the purpose of (i) avoiding U.S. tax related penalties or (ii) promoting, marketing or recommending to another party any transaction or matter addressed herein. > > > > ---------------------------------------------------------------------- > --- This SF.net email is sponsored by DB2 Express Download DB2 Express > C - the FREE version of DB2 express and take control of your XML. No=20 > limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > log4perl-devel mailing list > log4perl-devel=40lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/log4perl-devel > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - = - - - - - - - This message is intended only for the personal and confidential use of the = designated recipient(s) named above. If you are not the intended = recipient of this message you are hereby notified that any review, = dissemination, distribution or copying of this message is strictly = prohibited. This communication is for information purposes only and = should not be regarded as an offer to sell or as a solicitation of an = offer to buy any financial product, an official confirmation of any = transaction, or as an official statement of Lehman Brothers. Email = transmission cannot be guaranteed to be secure or error-free. Therefore, = we do not represent that this information is complete or accurate and it = should not be relied upon as such. All information is subject to change = without notice. -------- IRS Circular 230 Disclosure: Please be advised that any discussion of U.S. tax matters contained within = this communication (including any attachments) is not intended or written = to be used and cannot be used for the purpose of (i) avoiding U.S. tax = related penalties or (ii) promoting, marketing or recommending to another = party any transaction or matter addressed herein. |
From: Mike S. <m...@pe...> - 2007-06-28 23:54:24
|
On Thu, 28 Jun 2007, Berg, Eric wrote: > I've been looking for a way to get l4p to tell me where the config > under which it's running comes from. Essentially, I'd like to have > a method that would return the full path to the config file that it's > currently using. > > Obviously, there are complications, such as those relating to > programatic configuration subsequent to loading configs from a file, > in-line, and config (ini) files, but I could find nowhere that the file > name passed in to init() is retrievable. The name of the file isn't stored usually, since you can not only use a file but a string, a hashref, an URL, etc. to initialize L4p. Since you're calling init() in the first place, wouldn't it be easier to store the filename in your application instead? -- Mike Mike Schilli m...@pe... > > -Eric. > > -----Original Message----- > From: log...@li... > [mailto:log...@li...] On Behalf Of John > ORourke > Sent: Thursday, June 28, 2007 6:42 AM > To: Lee Goddard > Cc: log...@li... > Subject: Re: [log4perl-devel] When a missing config file > > Try putting: > > use Error; > > in one of your modules/scripts - it will override the warn/die handlers > globally, so unless Log4perl overrides them again it will give you a > stack trace. > > cheers > John > > Lee Goddard wrote: > > > > Please could Log/Log4perl/Config.pm line 619 offer a stack backtrace > > as well as barfing? > > > > My current project has four config files, several potential > > initialisers (bad idea, I know) and reports only via e-mail, since it > > is part of a MTA process. > > > > Thanks in anticipation > > > > Lee > > > > > > > > > > > > # The Postfix program > > > > # > > > > # <tq...@uk...>: Command died with status 2: > > "perl > > > > # -I/home/lgoddard/trafficjam/trunk/lib > > -MTrafficJam::Controller::Root -e > > > > # 'warn TrafficJam::Controller::Root->mail_in'". Command output: > > Cannot open > > > > # config file '/home/lgoddard/trafficjam/trunk/config/mail.l4p' at > > > > # /usr/local/share/perl/5.8.4/Log/Log4perl/Config.pm line 619, > > <STDIN> line > > > > # 26. > > > > # > > > > > > > > Lee Goddard > > > > Senior Software Developer > > > > Advertising.com, London > > > > > > > > P Think of the environment before you print this email > > > > > > > > ---------------------------------------------------------------------- > > -- > > > > ---------------------------------------------------------------------- > > --- This SF.net email is sponsored by DB2 Express Download DB2 Express > > > C - the FREE version of DB2 express and take control of your XML. No > > limits. Just data. Click to get it now. > > http://sourceforge.net/powerbar/db2/ > > ---------------------------------------------------------------------- > > -- > > > > _______________________________________________ > > log4perl-devel mailing list > > log...@li... > > https://lists.sourceforge.net/lists/listinfo/log4perl-devel > > > > > ------------------------------------------------------------------------ > - > This SF.net email is sponsored by DB2 Express Download DB2 Express C - > the FREE version of DB2 express and take control of your XML. No limits. > Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > log4perl-devel mailing list > log...@li... > https://lists.sourceforge.net/lists/listinfo/log4perl-devel > > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > > This message is intended only for the personal and confidential use of the designated recipient(s) named above. If you are not the intended recipient of this message you are hereby notified that any review, dissemination, distribution or copying of this message is strictly prohibited. This communication is for information purposes only and should not be regarded as an offer to sell or as a solicitation of an offer to buy any financial product, an official confirmation of any transaction, or as an official statement of Lehman Brothers. Email transmission cannot be guaranteed to be secure or error-free. Therefore, we do not represent that this information is complete or accurate and it should not be relied upon as such. All information is subject to change without notice. > > -------- > IRS Circular 230 Disclosure: > Please be advised that any discussion of U.S. tax matters contained within this communication (including any attachments) is not intended or written to be used and cannot be used for the purpose of (i) avoiding U.S. tax related penalties or (ii) promoting, marketing or recommending to another party any transaction or matter addressed herein. > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > log4perl-devel mailing list > log...@li... > https://lists.sourceforge.net/lists/listinfo/log4perl-devel > |
From: Berg, E. <eri...@le...> - 2007-06-28 17:49:49
|
I've been looking for a way to get l4p to tell me where the config under which it's running comes from. Essentially, I'd like to have a method that would return the full path to the config file that it's currently using. Obviously, there are complications, such as those relating to programatic configuration subsequent to loading configs from a file, in-line, and config (ini) files, but I could find nowhere that the file name passed in to init() is retrievable. Am I right about that? -Eric. -----Original Message----- From: log4perl-devel-bounces=40lists.sourceforge.net =5Bmailto:log4perl-devel-bounces=40lists.sourceforge.net=5D On Behalf Of = John ORourke Sent: Thursday, June 28, 2007 6:42 AM To: Lee Goddard Cc: log4perl-devel=40lists.sourceforge.net Subject: Re: =5Blog4perl-devel=5D When a missing config file Try putting: use Error; in one of your modules/scripts - it will override the warn/die handlers globally, so unless Log4perl overrides them again it will give you a stack trace. cheers John Lee Goddard wrote: > > Please could Log/Log4perl/Config.pm line 619 offer a stack backtrace=20 > as well as barfing? > > My current project has four config files, several potential=20 > initialisers (bad idea, I know) and reports only via e-mail, since it=20 > is part of a MTA process. > > Thanks in anticipation > > Lee > > =20 > > =20 > > =23 The Postfix program > > =23 > > =23 <tqm=40uk-sandbox.corp.advertising.com>: Command died with status = 2:=20 > =22perl > > =23 -I/home/lgoddard/trafficjam/trunk/lib=20 > -MTrafficJam::Controller::Root -e > > =23 'warn TrafficJam::Controller::Root->mail_in'=22. Command = output:=20 > Cannot open > > =23 config file '/home/lgoddard/trafficjam/trunk/config/mail.l4p' at > > =23 /usr/local/share/perl/5.8.4/Log/Log4perl/Config.pm line 619,=20 > <STDIN> line > > =23 26. > > =23 > > =20 > > Lee Goddard > > Senior Software Developer > > Advertising.com, London > > =20 > > P Think of the environment before you print this email > > =20 > > ---------------------------------------------------------------------- > -- > > ---------------------------------------------------------------------- > --- This SF.net email is sponsored by DB2 Express Download DB2 Express > C - the FREE version of DB2 express and take control of your XML. No=20 > limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > ---------------------------------------------------------------------- > -- > > _______________________________________________ > log4perl-devel mailing list > log4perl-devel=40lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/log4perl-devel > =20 ------------------------------------------------------------------------ - This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ log4perl-devel mailing list log4perl-devel=40lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/log4perl-devel - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - = - - - - - - - This message is intended only for the personal and confidential use of the = designated recipient(s) named above. If you are not the intended = recipient of this message you are hereby notified that any review, = dissemination, distribution or copying of this message is strictly = prohibited. This communication is for information purposes only and = should not be regarded as an offer to sell or as a solicitation of an = offer to buy any financial product, an official confirmation of any = transaction, or as an official statement of Lehman Brothers. Email = transmission cannot be guaranteed to be secure or error-free. Therefore, = we do not represent that this information is complete or accurate and it = should not be relied upon as such. All information is subject to change = without notice. -------- IRS Circular 230 Disclosure: Please be advised that any discussion of U.S. tax matters contained within = this communication (including any attachments) is not intended or written = to be used and cannot be used for the purpose of (i) avoiding U.S. tax = related penalties or (ii) promoting, marketing or recommending to another = party any transaction or matter addressed herein. |
From: Mike S. <m...@pe...> - 2007-06-28 17:36:19
|
On Thu, 28 Jun 2007, Lee Goddard wrote: > Please could Log/Log4perl/Config.pm line 619 offer a stack backtrace as > well as barfing? > > My current project has four config files, several potential initialisers > (bad idea, I know) and reports only via e-mail, since it is part of a > MTA process. Dumping a stack trace by default might be confusing to the casual L4p user, but you can certainly use the following: use Log::Log4perl; use Carp; eval { Log::Log4perl->init(...); }; if($@) { confess($@); } Would this work for you? -- Mike Mike Schilli m...@pe... > > > > Thanks in anticipation > > Lee > > > > > > # The Postfix program > > # > > # <tq...@uk...>: Command died with status 2: > "perl > > # -I/home/lgoddard/trafficjam/trunk/lib > -MTrafficJam::Controller::Root -e > > # 'warn TrafficJam::Controller::Root->mail_in'". Command output: > Cannot open > > # config file '/home/lgoddard/trafficjam/trunk/config/mail.l4p' at > > # /usr/local/share/perl/5.8.4/Log/Log4perl/Config.pm line 619, > <STDIN> line > > # 26. > > # > > > > Lee Goddard > > Senior Software Developer > > Advertising.com, London > > > > P Think of the environment before you print this email > > > > |
From: Lee G. <LGo...@UK...> - 2007-06-28 12:50:25
|
Thanks for the tip, John: I don't recall the module, but it looks like a good quick-fix, quicker than tracking-down and editing every version of L4p I install ! =20 But I'd still like the shortmess near configuration file errors, because they're pretty common end-user errors. > -----Original Message----- > From: John ORourke [mailto:joh...@o-...] >=20 > Try putting: >=20 > use Error; >=20 > in one of your modules/scripts - it will override the warn/die handlers > globally, so unless Log4perl overrides them again it will give you a > stack trace. >=20 > Lee Goddard wrote: > > > > Please could Log/Log4perl/Config.pm line 619 offer a stack backtrace > > as well as barfing? |
From: John O. <joh...@o-...> - 2007-06-28 10:42:42
|
Try putting: use Error; in one of your modules/scripts - it will override the warn/die handlers globally, so unless Log4perl overrides them again it will give you a stack trace. cheers John Lee Goddard wrote: > > Please could Log/Log4perl/Config.pm line 619 offer a stack backtrace > as well as barfing? > > > > My current project has four config files, several potential > initialisers (bad idea, I know) and reports only via e-mail, since it > is part of a MTA process. > > > > Thanks in anticipation > > Lee > > > > > > # The Postfix program > > # > > # <tq...@uk...>: Command died with status 2: "perl > > # -I/home/lgoddard/trafficjam/trunk/lib > -MTrafficJam::Controller::Root -e > > # 'warn TrafficJam::Controller::Root->mail_in'". Command output: > Cannot open > > # config file '/home/lgoddard/trafficjam/trunk/config/mail.l4p' at > > # /usr/local/share/perl/5.8.4/Log/Log4perl/Config.pm line 619, > <STDIN> line > > # 26. > > # > > > > Lee Goddard > > Senior Software Developer > > Advertising.com, London > > > > P Think of the environment before you print this email > > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > ------------------------------------------------------------------------ > > _______________________________________________ > log4perl-devel mailing list > log...@li... > https://lists.sourceforge.net/lists/listinfo/log4perl-devel > |
From: Lee G. <LGo...@UK...> - 2007-06-28 09:24:24
|
Please could Log/Log4perl/Config.pm line 619 offer a stack backtrace as well as barfing? =20 My current project has four config files, several potential initialisers (bad idea, I know) and reports only via e-mail, since it is part of a MTA process. =20 Thanks in anticipation Lee =20 =20 # The Postfix program # # <tq...@uk...>: Command died with status 2: "perl # -I/home/lgoddard/trafficjam/trunk/lib -MTrafficJam::Controller::Root -e # 'warn TrafficJam::Controller::Root->mail_in'". Command output: Cannot open # config file '/home/lgoddard/trafficjam/trunk/config/mail.l4p' at # /usr/local/share/perl/5.8.4/Log/Log4perl/Config.pm line 619, <STDIN> line # 26. # =20 Lee Goddard Senior Software Developer Advertising.com, London =20 P Think of the environment before you print this email =20 |
From: Mike S. <m...@pe...> - 2007-06-26 06:47:23
|
On Mon, 25 Jun 2007, Albert Vila wrote: > Is there a module like Log::Dispatch::FileRotate with an extra > option to compress the file after rotate it? Log::Dispatch::FileRotate is a 3rd party module, written by Mark Pfeiffer. Bcc:ing him. According to the documentation compression on the todo list: =head1 TODO compression, signal based rotates, proper test suite Alternatively, you can use an external rotator: http://log4perl.sourceforge.net/d/Log/Log4perl/FAQ.html#2d0d0 -- Mike Mike Schilli m...@pe... |
From: Mike S. <m...@pe...> - 2007-06-26 06:39:01
|
On Mon, 25 Jun 2007, Lee Goddard wrote: > Forgot to say thanks to all Log4perl developers for the multiline > Patternlayout. Thanks! Thanks for the note, the patch came from Cory Bennett, forwarded to him! :) -- Mike Mike Schilli m...@pe... |
From: Albert V. <av...@im...> - 2007-06-25 10:37:52
|
Hi Is there a module like Log::Dispatch::FileRotate with an extra option to compress the file after rotate it? Thanks |
From: Lee G. <LGo...@UK...> - 2007-06-25 10:05:47
|
Forgot to say thanks to all Log4perl developers for the multiline Patternlayout. Thanks! lee |
From: Mike S. <m...@pe...> - 2007-06-23 20:32:48
|
Hi Log4perl enthusiasts, the 1.12 release just hit the web site, here's the change list: 1.12 (2007/06/23) * (ms) Added Log::Log4perl::Resurrector to resurrect commented- out Log4perl statements in all subsequently loaded modules (allows for deploying L4p-enabled CPAN modules without requiring L4p). * (ms) Added ALWAYS easy mode macro (level=OFF) * (ms) Fixed logconfess() frame level bug reported by Ali Mesdaq. Added test case. If all goes well, it'll hit CPAN in a couple of days. Enjoy! -- Mike Mike Schilli m...@pe... |
From: Mike S. <m...@pe...> - 2007-06-23 20:24:49
|
On Fri, 22 Jun 2007, Mesdaq, Ali wrote: > Love this module but first thing I noticed was incorrect handling with > logconfess. I checked out the source and I think I see the reason > explained below. Yep, that's a bug. Fixed in 1.12 which will be released later today. Thanks for reporting this! -- Mike Mike Schilli m...@pe... > > Bug Description: > Calling logconfess(); only prints and records the log message passed to > logconfess() and the initiator of my module. > > Setup: > Test.pl script which uses my test.pm module. My module uses the > Log::Log4perl module and calls it from my module inside a sub routine. > But the exact order of calls is: > 1. test.pl runs > 2. test.pl uses test.pm > 3. test.pl calls $t = test->new(); > 4. test.pm uses Log::Log4perl > 5. test->new calls test->init() where Log::Log4perl gets initialized via > Log::Log4perl->init("log.conf"); > 6. test.pl then calls $t->blah() > 7. test->blah() does $l = get_logger("test") > 8. test->blah() calls $l->logconfess('testing logconfess') > > Result Is: > Message in log is params on left + "testing logconfess" at ./test.pl > line 8 > > Expected Result: > Message in log should be params on left + "testing logconfess at test.pm > line x \n test::blah('hash value') called at ./test.pl line 8" > > I was testing out the error levels and how the messages looked before > implementing this in my projects and I stumbled across this. I wrote my > own logging module before and had issues with longmess() and shortmess() > in carp. I think it's a little tricky dealing with the frame levels. I > noticed that logcluck() works fine. So in the source I noticed that the > main difference was how $Carp::CarpLevel was being set. In the cluck > call its set like: > $Carp::CarpLevel = $Carp::CarpLevel + 1; > And in the confess call its set like: > local $Carp::CarpLevel = 2; > I patched my local copy to the way the logcluck is setting the > $Carp::CarpLevel and my messages are as expected. > > Another thing I noticed is that doing a print Carp::longmess after > calling get_logger will also cause this error. But if I comment out the > get_logger call and print Carp::longmess it works as expected. > > Hope this makes it to the right people so the package can be updated. I > love it so far. Writing your own logging module really is a right of > passage in perl but what a waste of time when there are modules like > this around! > > Thanks, > ------------------------------------------ > Ali Mesdaq > Security Researcher II > Websense Security Labs > http://www.WebsenseSecurityLabs.com > ------------------------------------------ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > log4perl-devel mailing list > log...@li... > https://lists.sourceforge.net/lists/listinfo/log4perl-devel > |
From: Mesdaq, A. <am...@we...> - 2007-06-22 21:41:58
|
Love this module but first thing I noticed was incorrect handling with logconfess. I checked out the source and I think I see the reason explained below.=20 Bug Description: Calling logconfess(); only prints and records the log message passed to logconfess() and the initiator of my module. Setup: Test.pl script which uses my test.pm module. My module uses the Log::Log4perl module and calls it from my module inside a sub routine. But the exact order of calls is: 1. test.pl runs 2. test.pl uses test.pm 3. test.pl calls $t =3D test->new(); 4. test.pm uses Log::Log4perl 5. test->new calls test->init() where Log::Log4perl gets initialized via Log::Log4perl->init("log.conf"); 6. test.pl then calls $t->blah() 7. test->blah() does $l =3D get_logger("test") 8. test->blah() calls $l->logconfess('testing logconfess') Result Is: Message in log is params on left + "testing logconfess" at ./test.pl line 8 Expected Result: Message in log should be params on left + "testing logconfess at test.pm line x \n test::blah('hash value') called at ./test.pl line 8" I was testing out the error levels and how the messages looked before implementing this in my projects and I stumbled across this. I wrote my own logging module before and had issues with longmess() and shortmess() in carp. I think it's a little tricky dealing with the frame levels. I noticed that logcluck() works fine. So in the source I noticed that the main difference was how $Carp::CarpLevel was being set. In the cluck call its set like:=20 $Carp::CarpLevel =3D $Carp::CarpLevel + 1; And in the confess call its set like: local $Carp::CarpLevel =3D 2; I patched my local copy to the way the logcluck is setting the $Carp::CarpLevel and my messages are as expected. Another thing I noticed is that doing a print Carp::longmess after calling get_logger will also cause this error. But if I comment out the get_logger call and print Carp::longmess it works as expected. Hope this makes it to the right people so the package can be updated. I love it so far. Writing your own logging module really is a right of passage in perl but what a waste of time when there are modules like this around! Thanks, ------------------------------------------ Ali Mesdaq Security Researcher II Websense Security Labs http://www.WebsenseSecurityLabs.com ------------------------------------------ |
From: Mike S. <m...@pe...> - 2007-06-19 06:59:33
|
On Mon, 18 Jun 2007, Quinn Weaver wrote: > I noticed I can't call layout() on Log::Dispatch appenders: > > my $syslog_appender = Log::Log4perl::appender_by_name( 'MyAppender' ); > my $layout = $syslog_appender->layout(); > > Can't locate object method "layout" via package "Log::Dispatch::Syslog" at ... > > Is there any way around this? Would it be worthwhile to write a set of > wrappers to Log::Dispatch classes so they support the appender() method? > > Apologies if there is an obvious solution to this; I wasn't able to > find one in the docs. The "Access defined appenders" section explains this issue in detail, what you need is not the real appender, it's the Log4perl wrapper: http://log4perl.sourceforge.net/d/Log/Log4perl.html#356d5 Here's some sample code: use Log::Log4perl; use Log::Log4perl::Layout; use Log::Log4perl::Level; # Define a category logger my $log = Log::Log4perl->get_logger("Foo::Bar"); # Define a layout my $layout = Log::Log4perl::Layout::PatternLayout->new("%F-%L %m%n"); # Define a file appender my $stdout_appender = Log::Log4perl::Appender->new( "Log::Dispatch::Screen", ); $stdout_appender->layout($layout); $log->add_appender($stdout_appender); $log->level($INFO); $log->info("Waah!"); > PS: The reason I'm using Perl (instead of the configuration file little > language) is that I have some behavior I want to configure conditionally... > I want to add a ScreenAppender iff a MY_DEBUG environment variable is set, > but with the same layout as my existing Log::Dispatch::Syslog appender. Alternatively, you could use sub { } hooks on the right hand side of the Log4perl configuration file. Or use two different config files and switch between them according to the env variable setting. Or read the configuration file, perform manipulations on its content according to the env var setting and then feed it to init() (which also takes a string ref). Hope that helps! -- Mike Mike Schilli m...@pe... |
From: Quinn W. <qu...@fa...> - 2007-06-19 00:55:31
|
Hi, I noticed I can't call layout() on Log::Dispatch appenders: my $syslog_appender = Log::Log4perl::appender_by_name( 'MyAppender' ); my $layout = $syslog_appender->layout(); Can't locate object method "layout" via package "Log::Dispatch::Syslog" at ... Is there any way around this? Would it be worthwhile to write a set of wrappers to Log::Dispatch classes so they support the appender() method? Apologies if there is an obvious solution to this; I wasn't able to find one in the docs. PS: The reason I'm using Perl (instead of the configuration file little language) is that I have some behavior I want to configure conditionally... I want to add a ScreenAppender iff a MY_DEBUG environment variable is set, but with the same layout as my existing Log::Dispatch::Syslog appender. -- Quinn Weaver, independent contractor | President, San Francisco Perl Mongers http://fairpath.com/quinn/resume/ | http://sf.pm.org/ 510-520-5217 |
From: Carlos V. <cvi...@ne...> - 2007-06-08 06:14:39
|
Mike Schilli wrote: > Hmm. First off, in your configuration is no appender named > 'updatedevice.html', so appender_by_name will return undef. Even if The intention there was to make sure it wasn't still alive (left off from an unfinished execution of this same code) before calling add_appender again. > 'updatedevice.html' existed and appender_by_name returned an > object, calling undef() on it isn't the right way to get rid of it. > There's a method called eradicate_appender() for that: > > "To eradicate an appender from the system, > you need to call > Log::Log4perl->eradicate_appender($appender_name) > which will first remove the appender from every logger in the system > and then will delete all references Log4perl holds to it." > > Give it a whirl and let me know how it works out! > > -- Mike > Yes. That seems to do the trick. I hadn't seen that method. Thank you! cv |
From: Mike S. <m...@pe...> - 2007-06-08 02:37:14
|
On Thu, 7 Jun 2007, Carlos Vicente wrote: > First of all, thanks a lot for this great module! You're welcome :). > ... and then I add appenders as needed, via the API: In a Mason > ... > # Notice that I intentionally undef the object in order to call > DESTROY and make sure the string > # is not being used (wasting memory) except when this component is > called > if ( $logstr = Log::Log4perl::appender_by_name('updatedevice.html') ){ > undef($logstr); > } Hmm. First off, in your configuration is no appender named 'updatedevice.html', so appender_by_name will return undef. Even if 'updatedevice.html' existed and appender_by_name returned an object, calling undef() on it isn't the right way to get rid of it. There's a method called eradicate_appender() for that: "To eradicate an appender from the system, you need to call Log::Log4perl->eradicate_appender($appender_name) which will first remove the appender from every logger in the system and then will delete all references Log4perl holds to it." Give it a whirl and let me know how it works out! -- Mike Mike Schilli m...@pe... > I'm working on a project with libraries accessible via both a web > front-end (HTML::Mason, mod_perl) and command line scripts. Most of > the logging is intended for Syslog, but in some cases I temporarily > use the Screen appender (command-line) and the String appender for > output to the web. > > My initial config looks like: > > log4perl.oneMessagePerAppender = 1 > log4perl.category.Netdot = ERROR, Syslog > log4perl.category.Netdot::Model = INFO, Syslog > log4perl.category.Netdot::Model::Device = INFO, Syslog > log4perl.category.Netdot::UI = INFO, Syslog > log4perl.appender.Syslog = Log::Dispatch::Syslog > log4perl.appender.Syslog.ident = netdot > log4perl.appender.Syslog.facility = local0 > log4perl.appender.Syslog.min_level = debug > log4perl.appender.Syslog.layout = > Log::Log4perl::Layout::SimpleLayout > > $logstr = > Log::Log4perl::Appender->new(Log::Log4perl::Appender::String, > name=>'updatedevice.html') > $logger->add_appender($logstr); > > ... (stuff that produces log output) > > # somewhere in the presentation code: > print $logstr->string(); > > # at the end: > undef($logstr) if defined $logstr; > > > The problem is my results are intermittent. Sometimes I see the output > in the web page, sometimes I don't. I'm not sure what I'm doing wrong > here. Any ideas? Suggestions on how to do this some other way? > > Thanks in advance. > > cv > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > log4perl-devel mailing list > log...@li... > https://lists.sourceforge.net/lists/listinfo/log4perl-devel > |
From: Carlos V. <cvi...@ne...> - 2007-06-08 00:16:35
|
Hi, First of all, thanks a lot for this great module! I'm working on a project with libraries accessible via both a web front-end (HTML::Mason, mod_perl) and command line scripts. Most of the logging is intended for Syslog, but in some cases I temporarily use the Screen appender (command-line) and the String appender for output to the web. My initial config looks like: log4perl.oneMessagePerAppender = 1 log4perl.category.Netdot = ERROR, Syslog log4perl.category.Netdot::Model = INFO, Syslog log4perl.category.Netdot::Model::Device = INFO, Syslog log4perl.category.Netdot::UI = INFO, Syslog log4perl.appender.Syslog = Log::Dispatch::Syslog log4perl.appender.Syslog.ident = netdot log4perl.appender.Syslog.facility = local0 log4perl.appender.Syslog.min_level = debug log4perl.appender.Syslog.layout = Log::Log4perl::Layout::SimpleLayout and then I add appenders as needed, via the API: In a Mason component: $logger = Log::Log4perl->get_logger('Netdot::Model::Device'); # Notice that I intentionally undef the object in order to call DESTROY and make sure the string # is not being used (wasting memory) except when this component is called if ( $logstr = Log::Log4perl::appender_by_name('updatedevice.html') ){ undef($logstr); } $logstr = Log::Log4perl::Appender->new(Log::Log4perl::Appender::String, name=>'updatedevice.html') $logger->add_appender($logstr); ... (stuff that produces log output) # somewhere in the presentation code: print $logstr->string(); # at the end: undef($logstr) if defined $logstr; The problem is my results are intermittent. Sometimes I see the output in the web page, sometimes I don't. I'm not sure what I'm doing wrong here. Any ideas? Suggestions on how to do this some other way? Thanks in advance. cv |
From: Mike S. <m...@pe...> - 2007-05-30 05:52:48
|
Hi Log4perl enthusiasts, just released 1.11 to the log4perl.sf.net, here's what's new: 1.11 (2007/05/29) * (ms) Added PatternLayout::Multiline code by Cory Bennett to render multiline messages. * (ms) Added log level TRACE (lets through even more messages than DEBUG) (suggested by Craig). * (ms) Added 'syswrite' flag to file appender to have it use 'syswrite' instead of 'print', avoiding buffered or interleaving messages originating from different processes (thanks to Evan Miller). If all goes well, it'll go to CPAN in a couple of days. By the way, if you're in Houston/TX on June 27, here's a talk you might be interested in: http://conferences.mongueurs.net/yn2007/talk/600 Enjoy! -- Mike Mike Schilli m...@pe... |
From: Mike S. <m...@pe...> - 2007-05-24 08:10:59
|
On Thu, 24 May 2007, Chris Baxter wrote: > I've been working an a little web application, and needed to write a new > appender. I don't know if there is already a way to do something like > this. Anyway I thought I'd share it. > > Basically the rationale was that part of the code can either be run in a > production environment and log any errors to a database for later use, > or it can be run in 'test mode' from an administration interface, where > debugging messages are passed back to the user in a process report. Sounds like a good idea. I was wondering about the implementation, though: You seem to be mixing the 'appender' and 'layout' concepts although they are orthogonal in Log4perl. In Log4perl, the end user determines the layout of a message, regardless of which appender is going to be used. Having the appender use a predefined layout deprives the user of this choice. Any chance you could keep the two concepts separate? -- Mike Mike Schilli m...@pe... > > The usage is outlined in the Synopsis below, and it seams to work quite > well. Any comments or suggestions would be greatly appreciated. > > Also, I would like to publish this on my "please give me a better job" > website. Does anyone object to this (esp. Mike Schilli and Kevin Goess - > have I given you appropriate attribution?) > > cheers > --chris > > > > package Log::Log4perl::Appender::Array; > our @ISA = qw(Log::Log4perl::Appender); > use Data::Dumper; > ################################################## > # Log dispatcher writing to an arrayref > ################################################## > > ################################################## > sub new { > ################################################## > my $proto = shift; > my $class = ref $proto || $proto; > my %params = @_; > > my $self = { > name => "Array Dispatcher", > array=> [], > params => \%params, > }; > > bless $self, $class; > } > > ################################################## > sub log { > ################################################## > my $self = shift; > my %params = @_; > my $newhash = {}; > > foreach my $key (keys %{$self->{params}{keys}}) { > if ($self->{params}{keys}{$key} =~ /^VAL_(\d)/) { > $newhash->{$key} = $params{message}[$1-1]; > } else { > my $conv = Log::Log4perl::Layout::PatternLayout->new( > { > ConversionPattern => { > value => $self->{params}{keys}{$key} > } > } > ); > $newhash->{$key} =$conv->render( > $params{message}, > $params{log4p_category}, > $params{log4p_level}, > 5 + $Log::Log4perl::caller_depth, > ); > } > } > push (@{$self->{array}}, {params => \%params, values => $newhash }); > } > > ################################################## > sub array { > ################################################## > my($self, $level) = @_; > > if ($level) { > return [ > map { $_->{values} } > grep { $_->{params}{level} > ($level - 1) } > @{$self->{array}} > ]; > } else { > return [ > map { $_->{values} } > @{$self->{array}} > ]; > } > } > > ################################################## > sub reset { > ################################################## > my ($self) = @_; > > $self->{array} = []; > } > 1; > > __END__ > > =head1 NAME > > Log::Log4perl::Appender::Array - Append to aan Array > > =head1 SYNOPSIS > > my $config = <<'EOT'; > log4perl.rootLogger=DEBUG, DebugArray > > log4perl.appender.DebugArray = Log::Log4perl::Appender::Array > > #Set up the keys for the hash > #Use VAL_1, VAL_2, etc for the values passed to the log > statement > log4perl.appender.DebugArray.keys.timestamp = %d > log4perl.appender.DebugArray.keys.category = %c > log4perl.appender.DebugArray.keys.priority = %p > log4perl.appender.DebugArray.keys.customer = VAL_1 > log4perl.appender.DebugArray.keys.message = VAL_2 > > #just pass through the array of message items in the log > statement > log4perl.appender.DebugArray.layout = > Log::Log4perl::Layout::NoopLayout > log4perl.appender.DebugArray.warp_message = 0 > > > > # Append to the array > $logger->warn( $custid, 'big problem!!'); > > # Retrieve the result > my $appender = Log::Log4perl::appender_by_name('DebugArray'); > my $result = $appender->array($level); #$level is optional - if > omitted the entire array is returned > > # Reset the buffer > $appender->reset(); > > =head1 DESCRIPTION > > This is a simple appender based heavily on the DBI Appender by Kevin > Goess and the String appender by Mike Schilli. > It's designed to work in conjunction with the DBI appender, such that > the same modules can log to the Array appender in > a test environment and the debugging values can be returned directly to > the user without being permanently recorded, while > in a production environment error logs can be recorded in a database (or > to the file system). > > > =head1 SEE ALSO > > =head1 AUTHOR > > Chris Baxter <E<lt>cp...@ge...E<gt> > > =cut > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > log4perl-devel mailing list > log...@li... > https://lists.sourceforge.net/lists/listinfo/log4perl-devel > |
From: Chris B. <ch...@ge...> - 2007-05-23 12:29:42
|
Hi, I've been working an a little web application, and needed to write a new appender. I don't know if there is already a way to do something like this. Anyway I thought I'd share it. Basically the rationale was that part of the code can either be run in a production environment and log any errors to a database for later use, or it can be run in 'test mode' from an administration interface, where debugging messages are passed back to the user in a process report. The usage is outlined in the Synopsis below, and it seams to work quite well. Any comments or suggestions would be greatly appreciated. Also, I would like to publish this on my "please give me a better job" website. Does anyone object to this (esp. Mike Schilli and Kevin Goess - have I given you appropriate attribution?) cheers --chris package Log::Log4perl::Appender::Array; our @ISA = qw(Log::Log4perl::Appender); use Data::Dumper; ################################################## # Log dispatcher writing to an arrayref ################################################## ################################################## sub new { ################################################## my $proto = shift; my $class = ref $proto || $proto; my %params = @_; my $self = { name => "Array Dispatcher", array=> [], params => \%params, }; bless $self, $class; } ################################################## sub log { ################################################## my $self = shift; my %params = @_; my $newhash = {}; foreach my $key (keys %{$self->{params}{keys}}) { if ($self->{params}{keys}{$key} =~ /^VAL_(\d)/) { $newhash->{$key} = $params{message}[$1-1]; } else { my $conv = Log::Log4perl::Layout::PatternLayout->new( { ConversionPattern => { value => $self->{params}{keys}{$key} } } ); $newhash->{$key} =$conv->render( $params{message}, $params{log4p_category}, $params{log4p_level}, 5 + $Log::Log4perl::caller_depth, ); } } push (@{$self->{array}}, {params => \%params, values => $newhash }); } ################################################## sub array { ################################################## my($self, $level) = @_; if ($level) { return [ map { $_->{values} } grep { $_->{params}{level} > ($level - 1) } @{$self->{array}} ]; } else { return [ map { $_->{values} } @{$self->{array}} ]; } } ################################################## sub reset { ################################################## my ($self) = @_; $self->{array} = []; } 1; __END__ =head1 NAME Log::Log4perl::Appender::Array - Append to aan Array =head1 SYNOPSIS my $config = <<'EOT'; log4perl.rootLogger=DEBUG, DebugArray log4perl.appender.DebugArray = Log::Log4perl::Appender::Array #Set up the keys for the hash #Use VAL_1, VAL_2, etc for the values passed to the log statement log4perl.appender.DebugArray.keys.timestamp = %d log4perl.appender.DebugArray.keys.category = %c log4perl.appender.DebugArray.keys.priority = %p log4perl.appender.DebugArray.keys.customer = VAL_1 log4perl.appender.DebugArray.keys.message = VAL_2 #just pass through the array of message items in the log statement log4perl.appender.DebugArray.layout = Log::Log4perl::Layout::NoopLayout log4perl.appender.DebugArray.warp_message = 0 # Append to the array $logger->warn( $custid, 'big problem!!'); # Retrieve the result my $appender = Log::Log4perl::appender_by_name('DebugArray'); my $result = $appender->array($level); #$level is optional - if omitted the entire array is returned # Reset the buffer $appender->reset(); =head1 DESCRIPTION This is a simple appender based heavily on the DBI Appender by Kevin Goess and the String appender by Mike Schilli. It's designed to work in conjunction with the DBI appender, such that the same modules can log to the Array appender in a test environment and the debugging values can be returned directly to the user without being permanently recorded, while in a production environment error logs can be recorded in a database (or to the file system). =head1 SEE ALSO =head1 AUTHOR Chris Baxter <E<lt>cp...@ge...E<gt> =cut |
From: Mike S. <m...@pe...> - 2007-05-21 03:25:58
|
On Wed, 16 May 2007, Craig wrote: > I noticed that log4j now has a "trace" log level. (Even more messages > than debug.) > > Are there plans to add that to log4perl? > > I am a pretty decent perl programmer, so I'd be happy at taking a crack > at adding it to the code. Just added it to 1.11 in CVS, thanks for the pointer! -- Mike Mike Schilli m...@pe... |
From: Craig <cr...@po...> - 2007-05-17 00:19:42
|
Hi. I noticed that log4j now has a "trace" log level. (Even more messages than debug.) Are there plans to add that to log4perl? I am a pretty decent perl programmer, so I'd be happy at taking a crack at adding it to the code. Craig |
From: Mike S. <m...@pe...> - 2007-05-04 14:12:48
|
On Fri, 4 May 2007, Hussainsab, Babu wrote: > Am getting the following error while executing the log4perl program > while executing through perl express editor. > > "Can't locate Log/Log4perl.pm in @INC (@INC contains: Looks like you don't have it installed. Here's instructions: http://log4perl.sourceforge.net/d/Log/Log4perl/FAQ.html#f7dc3 -- Mike Mike Schilli m...@pe... > D:/Projects/PerlExecPath/ActivePerl-5.8/perl/site/lib > D:/Projects/PerlExecPath/ActivePerl-5.8/perl/lib .) at OTEC_logger.pl > line 3. > BEGIN failed--compilation aborted at OTEC_logger.pl line 3. " > > Plz help me to resolve this. > > Regards & Thanks > Babu H.M > > |