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) {
[...]
}
}