2014-11-03 52 views
1

我正在使用log4j在運行時記錄文本文件中的信息。這是tomcat/conf文件夾移動文件,同時運行正在鎖定文件的tomcat

log4j.additivity.com.ixaris.apps.genericapp.web.filter.HttpAccessFilter=false 

log4j.appender.file=org.apache.log4j.rolling.RollingFileAppender 
log4j.appender.file.rollingPolicy = org.apache.log4j.rolling.TimeBasedRollingPolicy 
log4j.appender.file.rollingPolicy.FileNamePattern = C:/dev/generic-app/generic-app.%d{yyyy-MM-dd}.log 
log4j.appender.file.layout = org.apache.log4j.EnhancedPatternLayout 
log4j.appender.file.layout.ConversionPattern = %m%n 
log4j.appender.file.Locking=false 

此文件被正確保存到我給它的路徑找到了log4j.properties文件。但是,當創建時,這個文件被tomcat本身立即鎖定。後來,而Tomcat是仍然在運行,我在處理該日誌文件的信息,我需要這個文件移動到另一個文件夾:C:/dev/generic-app/Processed

我使用這個代碼:

read = new BufferedReader(new FileReader(logFiles[i])); 

//parse and upload records in file to db 
parseLogFile(logFiles[i]); 

//move files to processed folder 
Files.move(logFiles[i].toPath(), new File(uploadedFolder.getAbsolutePath() + "\\\\" + logFiles[i].getName()).toPath(), StandardCopyOption.REPLACE_EXISTING); 

在parseLogFile我確保我做read.close()釋放文件上的任何流。

但是,這是引發此異常:

ERROR: Problem moving log files to Processed folder. 
java.nio.file.FileSystemException: C:\dev\generic-app\generic-app.2014-11-03.log -> C:\dev\generic-app\Processed\generic-app.2014-11-03.log: 
The process cannot access the file because it is being used by another process. 

     at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86) 
     at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97) 
     at sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387) 
     at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:286) 
     at java.nio.file.Files.move(Files.java:1345) 
     at log2db.Log2DB.main(Log2DB.java:90) 

我也試圖迫使垃圾收集System.gc(),但沒有運氣無論是。 有什麼建議嗎?謝謝!

+1

如果tomcat對該文件有鎖定,那麼確實沒有任何事情可以做...... – phantom 2014-11-03 16:13:30

+0

是的我想在這裏找到解決方法..我假設沒有直接的解決方案..我' m不知道爲什麼tomcat甚至鎖定文件,即使我設置鎖定爲false – Bernice 2014-11-03 16:19:37

+0

爲什麼你需要將文件複製到'Processed'? – Stefan 2014-11-03 18:45:10

回答

0

我知道這是舊的,但爲了防止任何人在這裏尋找答案,您可以檢查到Windows的logrotate實現。 https://sourceforge.net/p/logrotatewin/wiki/LogRotate/

請參閱copytruncate選項。

我只使用Linux版本,但到目前爲止,我一直在爲移動tomcat文件工作正常。