Регистрация ошибок из нескольких потоков в Java - PullRequest
0 голосов
/ 25 апреля 2018

Я использую встроенный регистратор 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);
    }
...