Hi,
I just resolved a problem with the DailyRollingFileAppender and I just want to
share my experience with others. If it can help someone...
When it was time to rollover the file, I got the error:
"log4j:ERROR Failed to rename [c:/temp/mspak/monitoring/transferService.log] to
[c:/temp/mspak/monitoring/transferService.log.2004-11-25.log]."
I search on Google for this error and found around 200 results and realized
that it was a problem for a lot of people.
As I use log4j with the Oracle JVM I supposed that it was an Oracle issue with
I/O or permissions. After a lot of discussions with the Oracle support, it was
definitely not the case.
I noted that a lot of discussions talked about the possibility that the file
has a handle on it that prevents log4j to rename the file.
To be sure I installed and run 2 tools from www.sysinternals.com : Handle and
Process Explorer.
Running Handle I got :
--------------
C:\>handle -u transferservice.log
Handle v2.2
Copyright (C) 1997-2004 Mark Russinovich
Sysinternals - www.sysinternals.com
oracle.exe pid: 984 AUTORITE NT\SYSTEM
C:\TEMP\MSPAK\monitoring\transferService.log
oracle.exe pid: 984 AUTORITE NT\SYSTEM
C:\TEMP\MSPAK\monitoring\transferService.log
--------------
There was indeed two handles on my log file. I double checked with Process
Explorer (a GUI app) and confirmed that Oracle maintained two handles on my log
file. Now I was sure that it was a file handle problem.
Then I got a flash and realized that in my log4j.xml configuration file I have
two daily rolling file appenders that pointed on the same physical file.
I tried to keep only one of them. Retried and YES, there was now only one
handle on the file!
Tested the rollover and it finally worked!
My configuration file was :
--------------
<!-- Daily Rolling File Appender -->
<appender name="DRFA" class="org.apache.log4j.DailyRollingFileAppender">
<param name="Threshold" value="DEBUG"/>
<param name="File"
value="c:/temp/mspak/monitoring/transferService.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{dd.MM HH:mm:ss:SSS} %-5p
[%c] %m%n"/>
</layout>
</appender>
<!-- Daily Rolling File Appender WARNING: disabled because file renaming
fails!!!
<appender name="DRFA-blankpattern"
class="org.apache.log4j.DailyRollingFileAppender">
<param name="File"
value="c:/temp/mspak/monitoring/transferService.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n"/>
</layout>
</appender>
-->
--------------
I have now a question:
I didn't tried to use that configuration outside of Oracle, is it wrong to use
2 appenders pointing on the same file (windows xp) ?
I searched on the G�lc� log4j manual but didn't found anything. Has anyone
tried to use this kind of configuration ?
I know that the Oracle JVM handles the threading differently than the Sun JVM,
so it can also explain the problem.
Adriano Labate