When we are trying to publish the log information by a Filehandler
into a same rotating set of files,
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.
I have created a jira[3] and attached a workaround for this problem.
I am concerned that the test case of this kind will bring performance
issue for our unit test,
since it is time-consuming and uncertainty.
My question is do we have any testing mechanism for this situation?
[1] Error message
java.util.logging.ErrorManager: WRITE_FAILURE
Error message - Exception occurred when writing to the output stream.
Exception - java.io.IOException: Writer is closed.
[2] Testcase
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) {
logger.info("Test");
}
}
}
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) {
thread = new Thread(new LoggingThread(logger));
thread.start();
}
}
}
[3] https://issues.apache.org/jira/browse/HARMONY-5981
--
Best Regards
Sean, Xiao Xia Qiu
China Software Development Lab, IBM