Настройка log4j2 для потоков

229
12 декабря 2017, 19:05

Есть класс Test, потомок Thread. Как мне настроить log4j2 что бы для каждого потока Test создавался свой лог файл.

Пытаюсь сделать так:

public class Test extends Thread {
    private String name;
    private Logger LOGGER;
    public Test(String name) {
        this.name=name;
    }
    @Override
    public void run() {
        System.setProperty("taskLogFolder", Global.getInstance().getLogRoot().toString());
        System.setProperty("taskLogName", name);
        LoggerContext loggerContext = Configurator.initialize(name, new File(Global.getInstance().getAppRoot()+WEB_INF_DIR+"taskLog4j2.xml").toString());
        LOGGER = loggerContext.getLogger(name);
        for(int i=0;i<100;i++) {
            LOGGER.info(LOGGER.getName()+" "+i);
        }
        //LOGGER.info(LOGGER.getName());
    }
}

Но при запуске выходит один файл.

new Test("task-8").start();
new Test("task-2").start();
new Test("task-3").start();
new Test("task-4").start();
new Test("task-5").start();
new Test("task-6").start();
new Test("task-7").start();

Раньше я пользовался log4j и там такое сделал, но как тут не пойму.

Что я делаю не так?

Файл taskLog4j2.xml:

    <?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info" monitorInterval = "30">
    <Properties>
        <Property name="pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [thread-id %T] %l - %msg%n</Property>
    </Properties>
    <Appenders>
        <RollingFile name="fileLogger" fileName="${sys:taskLogFolder}/${sys:taskLogName}.log" filePattern="${sys:taskLogFolder}/${sys:taskLogName}-%d{yyyy-MM-dd}.log">
            <PatternLayout>
                <pattern>${pattern}</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
        </RollingFile>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="${pattern}" />
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info" additivity="false">
            <appender-ref ref="console" />
            <appender-ref ref="fileLogger" />
        </Root>
        <Logger name="com.test.*" level="info">
            <appender-ref ref="fileLogger" level="info" />
        </Logger>
    </Loggers>
</Configuration>
READ ALSO
Как правильно передать координаты в Google Maps?

Как правильно передать координаты в Google Maps?

Пытаюсь геокодировать адрес переменной adr в координаты с долготой и шириной и отобразить метку на картеЗапускаю приложение

248
как инициализировать 5-ти мерный массив?

как инициализировать 5-ти мерный массив?

Привет! Есть простой массив Object[] arr = new int[50] заполненный некими значениями, также есть другой массив Object[][][][][] fiveDArr, правда он 5-ти мерный, нужно...

260
Чем отличается List от ArrayList?

Чем отличается List от ArrayList?

Чем отличается List от ArrayListПогуглил, но толком ничего не нашел (как минимум, на русском языке)

277
форма &lt;input type=&ldquo;datetime-local&rdquo;&gt;

форма <input type=“datetime-local”>

Подскажите пожалуйста как можно сделать что б в datetime-local всегда выдавался 24 часовой пояс либо как можно его заменить либо хотя бы изменить...

246