log4j имена файлов журнала?

Я также сталкиваюсь с этой проблемой, но только из-за сильной компоновки виджетов. Макет виджетов должен быть таким же легким, как вы можете создать. Теперь мой виджет работает идеально.

13
задан Dillie-O 17 September 2008 в 15:25
поделиться

8 ответов

Можно ли передать системное свойство Java для каждого задания? Если так, можно параметризовать как это:

java -Dmy_var=somevalue my.job.Classname

И затем в Вашем log4j.properties:

log4j.appender.A.File=${my_var}/A.log

Вы могли заполнить системное свойство Java со значением от среды хоста (например), которая однозначно определит экземпляр задания.

21
ответ дан shadit 17 September 2008 в 15:25
поделиться

Если имена задания знаются заранее, Вы могли бы включать имя задания, когда Вы делаете getLogger () вызов. Тогда можно связать другой appenders с различными регистраторами с отдельными именами файлов (или другие места назначения).

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

FileAppender appender = new FileAppender();
appender.setFileName(...);
appender.setLayout(...);
Logger logger = Logger.getLogger("com.company.job."+jobName);
logger.addAppender(appender);
3
ответ дан Asgeir S. Nilsen 17 September 2008 в 15:25
поделиться

У нас есть что-то подобное, реализованное в нашей системе. Мы храним определенные регистраторы в HashMap и инициализируем appenders для каждого из них по мере необходимости.

Вот пример:

public class JobLogger {
private static Hashtable<String, Logger> m_loggers = new Hashtable<String, Logger>();
private static String m_filename = "...";  // Root log directory

public static synchronized void logMessage(String jobName, String message)
{
    Logger l = getJobLogger(jobName);
    l.info(message);
}

public static synchronized void logException(String jobName, Exception e)
{
    Logger l = getJobLogger(partner);
    l.info(e.getMessage(), e);
}

private static synchronized Logger getJobLogger(String jobName)
{
    Logger logger = m_loggers.get(jobName);
    if (logger == null) {
        Layout layout = new PatternLayout("...");
        logger = Logger.getLogger(jobName);
        m_loggers.put(jobName, logger);
        logger.setLevel(Level.INFO);
        try {
            File file = new File(m_filename);
            file.mkdirs();
            file = new File(m_filename + jobName + ".log");
            FileAppender appender = new FileAppender(layout, file.getAbsolutePath(), false);
            logger.removeAllAppenders();
            logger.addAppender(appender);
    }
        catch (Exception e)
    { ... }
    }
    return logger;
}
}

Затем для использования этого в задании просто необходимо использовать одну запись строки как это:

JobLogger.logMessage(jobName, logMessage);

Это создаст один файл журнала для каждого имени задания и отбросит его в его собственном файле с тем именем задания в том, какой бы ни каталог Вы определяете.

можно играть с другими типами appenders и такого, как записано он продолжит добавлять, пока JVM не перезапущена, который не может работать, если Вы выполняете то же задание на сервере, который является всегда, но это дает общее представление о том, как он может работать.

3
ответ дан 18Rabbit 17 September 2008 в 15:25
поделиться

Вы можете иметь каждый NDC набора задания или MDC и затем записать appender, который варьируется имя на основе значения MDC или NDC. Создание нового appender не слишком трудно. Может также быть appender, который будет отвечать всем требованиям в песочнице log4j. Начните смотреть в http://svn.apache.org/viewvc/logging/log4j/trunk/contribs/

2
ответ дан James A. N. Stauffer 17 September 2008 в 15:25
поделиться

Вы могли записать свой собственный appender, который составляет его собственное имя файла, возможно, с помощью [File.createTempFile] ( http://java.sun.com/j2se/1.5.0/docs/api/java/io/File.html#createTempFile (java.lang. Строка, %20java.lang. Строка)) метод. Если бы FileAppender класс был записан правильно, то необходимо быть в состоянии расширить it— или RollingFileAppender — и переопределите getFile метод для возврата того, который Вы выбираете на основе любых новых свойств, которые требуется добавить.

1
ответ дан erickson 17 September 2008 в 15:25
поделиться

можно реализовать следующее:

  • А держатель ThreadLocal для идентификационных данных Вашего задания.
  • Расширяют FileAppender, Ваш FileAppender должен сохранить Карту, содержащую QuietWriter для каждых идентификационных данных задания. В методе поддобавляют, Вы получаете идентификационные данные своего задания от ThreadLocal, Вы ищете (или создайте), QuietWriter и пишут в него...

я могу отправить Вам некоторый код почтой, если Вы желаете...

0
ответ дан pgras 17 September 2008 в 15:25
поделиться

Tom Вы coud определяет и appenders для каждого задания. Позвольте нам, что у Вас есть 2 задания, соответствующие двум различным пакетам Java com.tom.firstbatch и com.tom.secondbatch, у Вас было бы что-то вроде этого в log4j.xml:

   <category name="com.tom.firstbatch">
      <appender-ref ref="FIRST_APPENDER"/>
   </category>
   <category name="com.tom.secondtbatch">
      <appender-ref ref="SECOND_APPENDER"/>
   </category>
0
ответ дан Alexandre Victoor 17 September 2008 в 15:25
поделиться

Вы могли программно настроить log4j при инициализации задания.

можно также установить log4j.properties файл во времени выполнения через системное свойство. От руководство :

Набор строковая переменная ресурса к значению системное свойство log4j.configuration . Предпочтительный способ определить файл инициализации по умолчанию через log4j.configuration системное свойство. В случае, если системное свойство log4j.configuration не определяется, затем установило ресурс строковой переменной на свое значение по умолчанию "log4j.properties".

Принятие Вы выполняете задания от различных команд Java, это позволит им использовать различные log4j.properties файлы и различные имена файлов для каждого.

Без специальных знаний того, как Ваши задания выполняются, трудно сказать!

0
ответ дан 17 September 2008 в 15:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: