From: Strahan, B. <bob...@hp...> - 2007-11-04 14:06:40
|
Hi Mike > Does your service open a files after it's been > running for a while? Typically, Log::Dispatch::File(::Locked) opens the > file only once unless 'close_after_write' is given. We do use the 'close_after_write' option... As I mentioned, there are multi= ple concurrent processes continually being spawned by the service, each usi= ng log4perl to log to the same logfile. So we figured we needed to use Fil= e::Locked along with close_after_write to ensure each process got an exclus= ive lock on the logfile before writing to it. Let me know if there is a better (more efficient) way to handle multiple co= ncurrent processes logging to the same file e.g. Would using socket appende= rs to route log messages to single log server process which handles file i/= o from one process be a better option? > Which version of Windows are you running by the way? On regular XP, it > seems to work as expected. Windows 2003 64-bit server.. I haven't tried it on other flavors of Window= s. For now I have worked around the problem by inserting the open() call into = a retry loop.. #open $fh, "$self->{mode}$self->{filename}" # or die "Cannot write to '$self->{filename}': $!"; while (1) { last if open $fh, "$self->{mode}$self->{filename}" ; } -----Original Message----- From: log...@li... [mailto:log4perl-devel-b= ou...@li...] On Behalf Of Mike Schilli Sent: Saturday, November 03, 2007 6:32 PM To: Mike Schilli Cc: log...@li... Subject: Re: [log4perl-devel] log4perl causing perl process to die (fwd) On Fri, 2 Nov 2007, Bob Strahan wrote: > However, it seems that if certain filesystem operations are > performed on the logfile it can cause the logger to execute die(), > causing my service to die, with the following error > > Cannot write to 'D:/Program Files (x86)/My App/logs/logfile.txt': > Permission denied at D:\Program Files (x86)\My > App\lib\perllibs\lib/Log/Dispatch/File.pm line 86. Hmm, this is Log::Dispatch::File's _open_file() function complaining that an open() failed. Does your service open a files after it's been running for a while? Typically, Log::Dispatch::File(::Locked) opens the file only once unless 'close_after_write' is given. Which version of Windows are you running by the way? On regular XP, it seems to work as expected. -- Mike Mike Schilli m...@pe... > I am using log4perl in a Win32 service that needs to run forever.. Howev= er, I have encountered a situation where the logger call is executing a die= () and causing my service to die... > > > The service spawns multiple child processes which run concurrently but al= l log to the same logfile.. We're using File::Locked to avoid contention.. = Extract from our logger config below.. > > "log4perl.appender.myapp" =3D> "Log::Dispatch::File::Locked", > "log4perl.appender.myapp.filename" =3D> "D:/Program Files (x86)/My App/lo= gs/logfile.txt", > "log4perl.appender.myapp.mode" =3D> "append", > "log4perl.appender.myapp.close_after_write" =3D> "true", > "log4perl.appender.myapp.permissions" =3D> "0660", > Etc.. > > > I can reproduce the problem sporadically by simply opening the logfile in= Wordpad.. > I can reproduce it reliably by repeatedly copying the logfile using test = script below > > #!perl -w > use File::Copy ; > while (1) { > copy ("D:/Program Files (x86)/My App/logs/logfile.txt", "D:/Program Fi= les (x86)/My App/logs/logfileCOPY.txt") ; > print "." ; > } > > > Any suggestions on how to defend against users copying or opening the log= file? We should block and retry until open() suceeds, rather than die(), = I think. > > Please let me know if you can help with a patch, workaround, or suggestio= n. > > Regards > > > > Bob Strahan > HP Software, R&D > > 703.579.1929 office | 702.967.5228 mobile | 702.579.1929 fax | bob.straha= n...@hp...<mailto:bob...@hp...> > 10700 Parkridge Blvd. #500 | Reston | VA 20191 > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. > Still grepping through log files to find problems? Stop. > Now Search log events and configuration files using AJAX and a browser. > Download your FREE copy of Splunk now >> http://get.splunk.com/ > _______________________________________________ > log4perl-devel mailing list > log...@li... > https://lists.sourceforge.net/lists/listinfo/log4perl-devel > ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ log4perl-devel mailing list log...@li... https://lists.sourceforge.net/lists/listinfo/log4perl-devel |