Соглашения относительно загрузки файлов ресурсов в проект Java - PullRequest
1 голос
/ 21 июня 2011

Учитывая, что у меня возникают проблемы при попытке применить внешнюю конфигурацию log4j через log4j.xml Теперь я заинтересован в принятии соглашения о загрузке файлов ресурсов в проекты Java.

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

Program.java

package the.project.path;

import java.io.File;
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.PropertyConfigurator;

class Program {

  static final Logger logger = Logger.getLogger("SampleLogger");
  static final File config = new File("the.project.path/conf/log4j.xml");
  static final String message = "The quick brown fox jumps over the lazy dog.";

  public static void main(String[] args) {

    if (config.exists()) {
      PropertyConfigurator.configure(config.getPath());
    } else {
      BasicConfigurator.configure();
    }

    try {
      logger.debug(message);
      logger.info(message);
      logger.warn(message);
      logger.error(message);
      logger.fatal(message);

    } catch (Exception exception) {
      System.out.println(exception.toString());
    }
  }
}

log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="SampleConsoleAppender" class="org.apache.log4j.ConsoleAppender"> 
    <layout class="org.apache.log4j.PatternLayout">
    <!--  
    TTCC is a message format used by log4j.
    TTCC is acronym for Time Thread Category Component.
    It uses the following pattern: %r [%t] %-5p %c %x - %m%n
    -->
    <param name="ConversionPattern" value="[%t] [%-5p] - %m%n" />
    </layout>
  </appender>
  <root>
  <appender-ref ref="SampleConsoleAppender" />
  </root>
</log4j:configuration>

Любой совет будет по достоинству оценен. Большое спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 21 июня 2011

Попробуйте использовать DOMConfigurator, например:

// Load log4j config file...
String path = "/path/to/log4j.xml");
DOMConfigurator.configure(path);

// Start Logging
LOG = Logger.getLogger(Program.class);

(код скопирован из моего текущего проекта, поэтому я знаю, что он работает); -)

Как и вышеупомянутое использование DOMConfigurator, вы можете дополнительно установить период наблюдения, при котором Log4J будет опрашивать xml-файл на предмет изменений, каждые хх миллисекунд, а затем повторно загружать изменения:

// Load log4j config file...
String path = "/path/to/log4j.xml");
DOMConfigurator.configureAndWatch(path, 30000); // 30sec poll

// Start Logging
LOG = Logger.getLogger(Program.class);

НТН

1 голос
/ 21 июня 2011

Вы можете попробовать установить -Dlog4j.debug = true, чтобы увидеть, какие параметры применяются к log4j.Он не отвечает на ваш вопрос загрузки ресурсов, но обычно полезно знать это.

...