예이 질문은 이전에 질문되었습니다. 그러나 문제는 좀 더 복잡해 보입니다. 나는 이것과 관련된 이전 질문의 모든 해결책을 사용했다.Freeing Java File Handles , Java keeps file locks no matter whatJava 파일 핸들이 닫히지 않습니다
package me.test;
import java.io.File;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public class Test {
Logger log = Logger.getAnonymousLogger();
FileHandler handle;
final static String newline = System.lineSeparator();
/**
* @param args
*/
public static void main(String[] args) {
Test t = new Test();
t.run();
}
public void run()
{
for (int i = 0; i < 6; i++) {
testLogs();
change();
}
testLogs();
if (handle != null)
{
handle.close();
log.removeHandler(handle);
}
}
public static FileHandler craftFileHandler(File file, boolean append)
{
if (file == null)
return null;
FileHandler fh = null;
try {
fh = new FileHandler(file.getPath(), append);
fh.setFormatter(new Formatter() {
@Override
public String format(LogRecord record) {
return "[test] " + "[" + record.getLevel().toString() + "]" + String.format(record.getMessage(), record.getParameters()) + newline;
}
});
return new FileHandler(file.getPath(), append);
} catch (Exception e) {
if (fh != null)
fh.close();
return null;
}
}
public void change()
{
if (handle != null)
{
handle.flush();
handle.close();
log.removeHandler(handle);
}
handle = null;
File f = new File("log.log");
handle = craftFileHandler(f, true);
System.out.println(f.getAbsolutePath());
if (handle != null)
log.addHandler(handle);
}
public void testLogs()
{
if (log == null)
{
log = Logger.getLogger("test");
log.setLevel(Level.ALL);
}
log.info("This is info #1");
log.warning("Warning 1");
log.info("meh info again.");
log.severe("SEVERE HELL YA NICE TEST");
log.info("You sure its good here?");
log.info("Handler count " + log.getHandlers().length);
}
}
이 코드는 테스트 코드로 의미 :
는에 관한 것이다. 나는이 테스트 파일을 만들어서 내가 가진 프로젝트에서 어떻게이 문제를 해결할 수 있는지 알아낼 수있다.
이유는 설명이 너무 빨리 발생하기 때문에이 루프가있는 이유입니다. 루프를 시뮬레이션하는 가장 좋은 방법이었습니다. 내 프로젝트에는 로그 파일을 넣을 위치를 선택할 수있는 구성이 있습니다. 그러나 파일이 다시로드되는 경우 config에서 변경되지 않습니다. 파일을 잠근 상태로두고 여분의 파일을 만드는 경향이 있습니다. EVERY 새로 고침
이 작업을하고 싶습니다. 이것이 제대로 작동하기 시작하면. 그런 다음 프로젝트에서 제대로 구현할 수 있습니다.
내 코드가이 지저분 해 보입니다. 나는 더 깨끗한 코드로 포스트를 업데이트 할 것이다. 동일한 문제가 발생하는지 확인하십시오. 그렇다면 나는 최선의 결과를보고 잘못된 것을 조사한 후에 그것에 대해 더 자세하게 게시하려고 노력할 것입니다. – CoasterChris