Как я могу запретить моему регистратору записывать несколько экземпляров файла журнала? - PullRequest
2 голосов
/ 03 августа 2010

Я написал собственный регистратор, единственным дополнением которого является следующий метод:

public static synchronized Logger getLogger(String name) {
    try {
        boolean append = true;
        FileHandler handler = new FileHandler("tmp.log", append);
        Logger      log     = Logger.getLogger(name);
        log.addHandler(handler);
        return log;
    } catch (java.io.IOException ex) {
        //Logger.getLogger(LibraLogger.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SecurityException ex) {
        //Logger.getLogger(LibraLogger.class.getName()).log(Level.SEVERE, null, ex);
    }
    return Logger.getLogger(name);
}

Он создает серию файлов журналов tmp.log, tmp.log.1, tmp.log.2 и т. Д.

Как мне предотвратить это?

Ответы [ 2 ]

5 голосов
/ 03 августа 2010

В вашем файле logging.properties убедитесь, что для java.util.logging.FileHandler.limit установлено значение 0.

Из документов:

java.util.logging.FileHandler.limit указывает приблизительный максимум сумма для записи (в байтах) любому файл. Если это ноль, то есть нет ограничений. (По умолчанию нет ограничений).

Для вращающегося набора файлов, как каждый файл достигает заданного предела размера, это закрыт, повернут и новый файл открыт. Последовательно старые файлы именуется путем добавления "0", "1", "2" и т. д. в базовое имя файла.

Другая возможность заключается в том, что вы пытаетесь записать в один и тот же файл журнала несколько процессов. Если регистратор обнаружит, что файл не может быть открыт (он заблокирован другим процессом), он создаст новый, добавив к нему следующий свободный номер.

0 голосов
/ 14 августа 2013

@ badcodenotreat Я натолкнулся на ваш оригинальный вопрос, потому что у меня была похожая проблема, и решение @Romain Hippeau оказалось полезным. Теперь, чтобы ответить на ваш другой вопрос:

«… даже если метод синхронизирован, регистратор обнаруживает, что файл не может быть открыт. Есть идеи, как этого добиться?». ...

Я реализовал свой FileHandler в своем собственном отдельном классе, используя одноэлементный шаблон проектирования, так что только один экземпляр файла журнала создается и возвращается в мое основное приложение регистрации каждый раз, когда делается запрос. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...