Как настроить ведение журнала Java с помощью файла свойств? (Java.util.logging) - PullRequest
75 голосов
/ 06 июня 2009

У меня дурацкая проблема с журналированием java: я загружаю конфигурацию регистрации из моего файла конфигурации приложения - но он ничего не регистрирует после чтения файла (что похоже на примеры, которые вы найдете в сети кроме дополнительной настройки приложения - удаление также не поможет). Строка журнала «initializing ...» выглядит просто отлично, но «запускающее приложение» и любые другие сообщения не регистрируются на консоли, и файл журнала никогда не создается. Что мне здесь не хватает?

Код Logger выглядит так:

...
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

Ответы [ 5 ]

88 голосов
/ 06 июня 2009

вы можете установить файл конфигурации регистрации через командную строку:

$ java -Djava.util.logging.config.file=/path/to/app.properties MainClass

этот способ кажется чище и проще в обслуживании.

24 голосов
/ 06 июня 2009

Хорошо, первая интуиция здесь:

handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level = ALL

Анализатор Java-файлов не так уж и умен, я не уверен, что он справится с этим. Но я пойду посмотрю документы снова ...

А пока попробуйте:

handlers = java.util.logging.FileHandler
java.util.logging.ConsoleHandler.level = ALL

Обновление

Нет, нужно больше кофе. Nevermind.

Хотя я и думаю больше, обратите внимание, что вы можете использовать методы из Свойства для загрузки и печати файла проп: возможно, стоит написать минимальную программу, чтобы увидеть, что, по мнению Java, она читает в этом файле .


Еще одно обновление

Эта строка:

    FileInputStream configFile = new FileInputStream("/path/to/app.properties"));

имеет дополнительный конец. Это не скомпилируется. Убедитесь, что вы работаете с файлом класса, которым вы себя считаете.

12 голосов
/ 20 сентября 2010

Я пробовал ваш код в коде выше не использовать [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();
    }
}
7 голосов
/ 05 января 2016
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 ().

3 голосов
/ 17 августа 2009

Вы ищете файл журнала по правильному пути: % h / one% u.log

Здесь% h разрешается в вашем доме: в окнах по умолчанию это: C: \ Documents and Settings (имя_пользователя).

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

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