Я использую встроенный регистратор Java для записи ошибок (зафиксированных в операторе try-catch
) в текстовый файл.
Доступ к одному из моих регистраторов осуществляется несколькими потоками.Каждый поток пишет правильно, но проблема в том, что, когда два потока пытаются писать одновременно, один из них заканчивается созданием нового файла, поэтому я получаю два файла log.txt
и log.txt.1
.
Как я могу синхронизировать эти действия, чтобы не создавать новый файл?
Для справки, вот как я настраиваю регистратор для рассматриваемого класса:
// Set up the network logger
private void LoggerSetup() throws IOException{
Logger LOGGER = Logger.getLogger(ClientConnect.class.getName());
File path = new File("logs/");
File file = new File(path, "NetworkLogs.txt");
path.mkdirs();
if(!file.exists())
file.createNewFile();
FileHandler fileHandler;
SimpleFormatter formatter;
try {
fileHandler = new FileHandler(file.getPath(), true);
LOGGER.addHandler(fileHandler);
formatter = new SimpleFormatter();
fileHandler.setFormatter(formatter);
} catch (IOException | SecurityException ex) {
Logger.getLogger(ClientConnect.class.getName()).log(Level.SEVERE, null, ex);
}
}
ИВот пример использования этого регистратора:
catch (IOException e) {
Logger.getLogger(ClientConnect.class.getName()).log(Level.SEVERE, "ClientConnect", e);
}