Динамическая конфигурация Log4J - PullRequest
4 голосов
/ 09 августа 2011

Есть ли способ динамически настраивать логгеры log4j. Я хочу, чтобы каждый экземпляр класса записывал в отдельный файл (например, на основе какого-то уникального свойства между экземплярами). Я хотел бы настроить все, кроме файла из конфигурации XML, а затем для каждого экземпляра установить файл.

Есть ли способ сделать это с помощью log4j?

1 Ответ

7 голосов
/ 10 августа 2011

Хорошо, из вашего комментария, вот что я бы попробовал.

Я думаю, вы создадите свои 10 экземпляров в начале вашего приложения.!?в любом случае.

В вашем log4j.xml определите 10 appender с именем = yourUniqueId (этот уникальный идентификатор будет жестко запрограммирован)

Заставьте этих аппендеров писать в yourUniqueid.log

<logger name="yourUniqueId" additivity="false">
    <level value="INFO" />
    <appender-ref ref="fileAppender" />
</logger>

<appender name="fileAppender" class="org.apache.log4j.FileAppender">
<param name="File" value="/path/yourfile.log"/>

    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{dd MM yyyy HH:mm:ss,SSS} %m%n"/>
    </layout>
</appender>

Затем в конструкторе объектов создайте экземпляр правого регистратора с уникальным идентификатором объекта.

Что-то в этом роде:

public MyClassContructor(){
     String uniqueId = getMyUniqueIdFromSomewhere();
     logger = Logger.getLogger(uniqueId);
} 

Я думаю, вы не хотите возитьсяс log4j.xml тогда вам придется использовать API log4j и создать свой собственный appender на основе вашего уникального идентификатора

Примерно так:

public class YourClass{
Logger logger = Logger.getLogger(YourClass.class);
SimpleLayout layout = new SimpleLayout();
FileAppender appender = null;

public YourClass() {
    try {
        appender = new FileAppender(layout, "/path/tolog/yourUniqueId.log", false);
        logger.addAppender(appender);

        logger.setLevel((Level) Level.DEBUG);

    }
    catch(IOException e) {
        e.printStackTrace();
        logger.error("Printing ERROR Statements",e);
    }
}

Таким образом, каждый экземпляр YourClass будетзаписать в другой файл журнала.все, что вам нужно сделать, это придумать способ получить этот уникальный идентификатор, когда вы вызываете конструктор.

Надеюсь, это поможет.

...