Я использую встроенный журнал 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);
}
Отличный звонок. Я вызвал его из статического контекста, и, похоже, проблема решена.




Попробуйте запустить установку из блока
staticв основном классе.