Регистрация ошибок из нескольких потоков в Java

Я использую встроенный журнал 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 в основном классе.

Bhesh Gurung 24.04.2018 23:50

Отличный звонок. Я вызвал его из статического контекста, и, похоже, проблема решена.

willh99 24.04.2018 23:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
54
0

Другие вопросы по теме