Как настроить ведение журнала Java с помощью файла свойств? (Java.util.logging)
У меня есть глупая проблема записи в Java: я загружаю конфигурацию ведения журнала из своего конфигурационного файла приложения - но он просто ничего не записывает после чтения файла (что очень похоже на примеры, которые вы найдете в сети за исключением дополнительной конфигурации приложения - удаление этого также не помогает). Строка журнала "инициализация..." отображается просто отлично, но "начальное приложение" и любые другие сообщения не регистрируются на консоли и не создаются ни один файл журнала. Что мне здесь не хватает?
Код регистратора выглядит следующим образом:
...
Logger log = Logger.getLogger("myApp");
log.setLevel(Level.ALL);
log.info("initializing - trying to load configuration file ...");
Properties preferences = new Properties();
try {
FileInputStream configFile = new FileInputStream("/path/to/app.properties");
preferences.load(configFile);
LogManager.getLogManager().readConfiguration(configFile);
} catch (IOException ex)
{
System.out.println("WARNING: Could not open configuration file");
System.out.println("WARNING: Logging not configured (console output only)");
}
log.info("starting myApp");
...
И это файл конфигурации:
appconfig1 = foo
appconfig2 = bar
# Logging
handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level = ALL
# File Logging
java.util.logging.FileHandler.pattern = %h/myApp.log
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.level = INFO
# Console Logging
java.util.logging.ConsoleHandler.level = ALL
Ответы
Ответ 1
Хорошо, первая интуиция здесь:
handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level = ALL
Анализатор файлов Java prop не все настолько умный, я не уверен, что он справится с этим. Но я снова посмотрю на документы.
В среднем, попробуйте:
handlers = java.util.logging.FileHandler
java.util.logging.ConsoleHandler.level = ALL
Update
Нет, ну, нужно больше кофе. Nevermind.
В то время как я думаю больше, обратите внимание, что вы можете использовать методы в Properties для загрузки и печати prop файла: это может быть стоит написать минимальную программу, чтобы увидеть, что java считает, что она читает в этом файле.
Другое обновление
Эта строка:
FileInputStream configFile = new FileInputStream("/path/to/app.properties"));
имеет дополнительный конец. Он не будет компилироваться. Убедитесь, что вы работаете с файлом класса, который, как вы думаете.
Ответ 2
вы можете настроить файл конфигурации ведения журнала через командную строку:
$ java -Djava.util.logging.config.file=/path/to/app.properties MainClass
этот способ кажется более чистым и более легким в обслуживании.
Ответ 3
Я пробовал ваш код в приведенном выше коде, не используйте
[Preferences.load(CONFIGFILE);]
и он будет работать. Здесь работает пример кода
public static void main(String[]s)
{
Logger log = Logger.getLogger("MyClass");
try {
FileInputStream fis = new FileInputStream("p.properties");
LogManager.getLogManager().readConfiguration(fis);
log.setLevel(Level.FINE);
log.addHandler(new java.util.logging.ConsoleHandler());
log.setUseParentHandlers(false);
log.info("starting myApp");
fis.close();
}
catch(IOException e) {
e.printStackTrace();
}
}
Ответ 4
Logger log = Logger.getLogger("myApp");
log.setLevel(Level.ALL);
log.info("initializing - trying to load configuration file ...");
//Properties preferences = new Properties();
try {
//FileInputStream configFile = new //FileInputStream("/path/to/app.properties");
//preferences.load(configFile);
InputStream configFile = myApp.class.getResourceAsStream("app.properties");
LogManager.getLogManager().readConfiguration(configFile);
} catch (IOException ex)
{
System.out.println("WARNING: Could not open configuration file");
System.out.println("WARNING: Logging not configured (console output only)");
}
log.info("starting myApp");
это работает..:)
вы должны передать InputStream в readConfiguration().
Ответ 5
Вы ищете файл журнала по правильному пути:
% h/one% u.log
Здесь% h разрешается для вашего дома: в окнах это значение по умолчанию:
C:\Documents and Settings (имя_пользователя).
Я пробовал образец кода, который вы опубликовали, и он отлично работает после того, как вы указали путь к файлу конфигурации (logging.properties либо через код, либо java args).