Description
When we are trying to log by a Filehandler to publish the information into a same file,it will introduce multi-thread defect .
As a result, it will throw such exception[1] while logging.
The root cause is that the destination file may be deleted by other thread if they are not synchronized.
Below testcase[2] can reproduce the issue.
[1]
java.util.logging.ErrorManager: WRITE_FAILURE
Error message - Exception occurred when writing to the output stream.
Exception - java.io.IOException: Writer is closed.
[2]
package logging;
import java.io.File;
import java.util.logging.FileHandler;
import java.util.logging.Logger;
public class FileHandlerTest {
static class LoggingThread implements Runnable {
private Logger logger;
public LoggingThread(Logger logger)
{ this.logger = logger; } public void run() {
while (true)
}
}
public static void main(String[] args) throws Exception {
Logger logger = Logger.getLogger("test");
String path = new File(".").getAbsolutePath();
FileHandler fh = new FileHandler(path, 3000000, 12, false);
logger.setUseParentHandlers(false);
logger.addHandler(fh);
Thread[] threads = new Thread[12];
for (Thread thread : threads)
}
}