Java, вызывающий класс Logger в других классах

Я написал отдельный класс MyLogger со статическим методом

static public void setup(String className, Exception e, Level level) {

    System.out.println("className = " + className);
    Logger logger = Logger.getLogger(className);
    logger.setLevel(Level.INFO);



    try {
        fileTxt = new FileHandler("Logging.%u.%g.txt",1024 * 1024, 10, true );
        // create a TXT formatter
        formatterTxt = new SimpleFormatter();
        fileTxt.setFormatter(formatterTxt);

        logger.addHandler(fileTxt);
        logger.log(level, e.toString(), e);
    } catch (IOException | SecurityException ex) {
        System.out.println("SecurityException ");
        Logger logger2=Logger.getLogger(MyLogger.class.getName());
        logger2.addHandler(new ConsoleHandler());
        logger2.log(Level.SEVERE, null, ex);
    }

}

Этот статический метод получает строку className, которую я помещаю в качестве параметра в Logger.getLogger().

В другом классе я вызываю MyLogger.setup(CommonFrame.class.getName(), e, Level.SEVERE). Все работает. Но проблема в том, что в файле я получаю "25 мая 2014 г. 14:05:30 Настройка javagui.MyLogger", и я подумал, что вместо этого должно быть вот так "25 мая 2014 г. 14:05:30 javagui.CommonFrame"потому что я присвоил это имя регистратору. Я прав? Если да, как я могу это исправить?

2 ответа

Вы должны использовать свойство format java.util.logging.SimpleFormatter, чтобы использовать имя регистратора вместо исходного имени класса.

Измените скрипт запуска, чтобы установить следующее системное свойство:

-Djava.util.logging.SimpleFormatter.format="%1$tc %3$s%n%4$s: %5$s%6$s%n"

Или измените ваши logging.properties, чтобы включить:

java.util.logging.SimpleFormatter.format=%1$tc %3$s%n%4$s: %5$s%6$s%n

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

Вы можете использовать метод log(LogRecord) и указать имя класса.

      static public void setup(String className, Exception e, Level level) {

    [...]

    try {
        [...]
        logger.addHandler(fileTxt);
        LogRecord record = new LogRecord(level, e.toString());
        record.setThrown(e);
        record.setSourceClassName(className);
        record.setSourceMethodName("");
        logger.log(record);
    } catch (IOException | SecurityException ex) {
        [...]
    }

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