2014-01-14 4 views
0

У меня есть 2 файла конфигурации для лесозаготовок, config1.properties и config2.propertiesJava Logger - Изменения конфигурации не отражаются во время выполнения

Когда я загрузить config1.properties и войти что-то, формат является правильным, но сразу после того, как я загружаю второй файл конфигурации, изменения не отражаются. Вот мой код:

System.setProperty("java.util.logging.config.file", "config1.properties"); 
logger = Logger.getLogger(this.getClass().getSimpleName()); 
logger.info("Message 1"); 
System.setProperty("java.util.logging.config.file", "config2.properties"); 
LogManager logManager = LogManager.getLogManager(); 
logManager.readConfiguration(); 
logger = Logger.getLogger("NewLogger"); 
logger.info("Message 2"); 

Я поставил конфигурации в config2.properties для регистрации сообщений в 2 строки, однако сообщение все еще показывает в одной строке.

Любые идеи, почему новая конфигурация не вступает в силу? Я уверен, что мои конфигурационные файлы верны, потому что я попытался загрузить config2 перед config1 и показал мои зарегистрированные сообщения в 2 строках.

Вот вошедшего результат:

[01-13-2014 16:48:56:186] LoggerUnitTest INFO: Message 1 
[01-13-2014 16:48:56:195] LoggerUnitTest INFO: Message 2 

Он должен показать, как:

[01-13-2014 16:48:56:186] LoggerUnitTest INFO: Message 1 
[01-13-2014 16:48:56:195] LoggerUnitTest INFO: 

Сообщение 2

Ниже приведены конфигурационные файлы, которые я использую:

handlers=java.util.logging.ConsoleHandler 

.level= FINE 

# Limit the message that are printed on the console to INFO and above. 
java.util.logging.ConsoleHandler.level = INFO 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 
java.util.logging.ConsoleHandler.formatter.format = [%1$tm-%1$td-%1$tY %1$tk:%1$tM:%1$tS:%1$tL] %4$s: %5$s%6$s%n 

config2.properties

handlers=java.util.logging.ConsoleHandler 

.level= FINE 

# Limit the message that are printed on the console to INFO and above. 
java.util.logging.ConsoleHandler.level = INFO 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 
# Note that this line is different from the line in config1 
java.util.logging.ConsoleHandler.formatter.format = [%1$tm-%1$td-%1$tY %1$tk:%1$tM:%1$tS:%1$tL] %n %4$s: %5$s%6$s%n 

ответ

3

Это работает для меня:

Test.ява

import java.util.logging.LogManager; 
import java.util.logging.Logger; 

public class Test { 
    public static void main(String[] args) throws Exception { 
    System.setProperty("java.util.logging.config.file", "config1.properties"); 
    Logger logger = Logger.getLogger(Test.class.getSimpleName()); 
    logger.info("Message 1"); 
    System.setProperty("java.util.logging.config.file", "config2.properties"); 
    LogManager logManager = LogManager.getLogManager(); 
    logManager.readConfiguration(); 
    logger = Logger.getLogger(Test.class.getSimpleName()); 
    logger.info("Message 2"); 
    } 
} 

config1.properties

handlers=java.util.logging.ConsoleHandler 

.level= FINE 

# Limit the message that are printed on the console to INFO and above. 
java.util.logging.ConsoleHandler.level = INFO 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 

config2.properties

handlers=java.util.logging.ConsoleHandler 

.level= FINE 

# Limit the message that are printed on the console to INFO and above. 
java.util.logging.ConsoleHandler.level = INFO 
java.util.logging.ConsoleHandler.formatter = java.util.logging.XMLFormatter 

Javac Test.java
Java Test

Jan 13, 2014 8:51:20 PM Test main 
INFO: Message 1 
<?xml version="1.0" encoding="windows-1252" standalone="no"?> 
<!DOCTYPE log SYSTEM "logger.dtd"> 
<log> 
<record> 
    <date>2014-01-13T20:51:20</date> 
    <millis>1389664280170</millis> 
    <sequence>1</sequence> 
    <logger>Test</logger> 
    <level>INFO</level> 
    <class>Test</class> 
    <method>main</method> 
    <thread>10</thread> 
    <message>Message 2</message> 
</record> 
+0

Пожалуйста, проверьте мой первоначальный ответ, я предложил другой файл конфигурации, который вы можете попробовать, можете ли вы помочь мне выяснить, почему свойство formatter.format не обновляется? –

+0

Я не делал совсем не так, как вы. Как насчет того, чтобы вы каждый раз пытались создать журнал? ? В вашем случае: Logger.getLogger (this.getClass(). GetSimpleName()); – unigeek

+0

Хорошо, это не так. Вы можете видеть, что мой пример работает? все, что вам нужно. Я бы начал с примера, который работает, и попытайтесь изменить его на то, что вам нужно.То, что я дал, является минимальным, поэтому должно быть просто. – unigeek

1

Посмотрите Документации о Logger.getLogger(String name). documentation

это говорит

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

Так Даже если установить новые свойства конфигурации вашего экземпляра регистратор имеет старую конфигурацию

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

logger = Logger.getLogger("new Name"); 

может быть, вы, возможно, придется изменить введите имя параметра по-разному. или он будет возвращать старый объект лесоруба

EDIT

Вот пример кода я попытался

import java.io.IOException; 
import java.util.logging.Level; 
import java.util.logging.LogManager; 
import java.util.logging.Logger; 

public class LoggingTest { 

    public static void main(String[] args) { 
     System.setProperty("java.util.logging.config.file", "config1.properties"); 
     Logger logger = Logger.getLogger(LoggingTest.class.getSimpleName()); 
     logger.info("Message 1"); 
     System.setProperty("java.util.logging.config.file", "config2.properties"); 
     LogManager logManager = LogManager.getLogManager(); 
     try { 
      logManager.readConfiguration();//logManager.readConfiguration(new FileInputStream(new File("config2.properties"))); 
     } catch (IOException ex) { 
      Logger.getLogger(LoggingTest.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (SecurityException ex) { 
      Logger.getLogger(LoggingTest.class.getName()).log(Level.SEVERE, null, ex); 
     } 

     logger = Logger.getLogger("NewLogger"); 
     logger.info("Message 2"); 

    } 
} 
+0

Привет, Я попытался это, то же самое результат. Пожалуйста, проверьте мой новый код выше, я добавил изменения –

+0

@ShehryarFarooq, вы должны добавить его после прочтения конфигурации, поместите его после logManager.readConfiguration(); – sasankad

+0

Извините, это то, что у меня было в моем коде, все тот же результат –

Смежные вопросы