Log4j2 - невозможно записать логи в файл - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь использовать log4j2 для записи операторов журнала как в консоль, так и в файлы журнала. Однако когда я проверяю папку журнала, ничего не создается.

Идея состоит в том, чтобы использовать RoutingAppender, чтобы все тестовые классы каждого пакета находились в одной папке.

Вот файл log4j2. xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Properties>
        <Property name="LOG_PATTERN">%d{HH:mm:ss.SSS} [%t] %-5level [%5X{tId}] %logger{36} - %msg%n</Property>
    </Properties>
    <Appenders>
        <Routing name="MyRoutingAppender">
            <Routes pattern="$${ctx:threadName}">
                <Route>
                    <RollingFile
                            fileName="logs/${ctx:testGroupName}/${ctx:threadName}.log"
                            name="appender-${ctx:threadName}"
                            filePattern="logs/${date:yyyy-MM}/${ctx:threadName}-%d{yyyy-MM-dd}-%i.log.gz">
                        <PatternLayout pattern="${LOG_PATTERN}"/>
                        <Policies>
                            <TimeBasedTriggeringPolicy interval="6" modulate="true" />
                            <SizeBasedTriggeringPolicy size="10 MB" />
                        </Policies>
                    </RollingFile>
                </Route>
            </Routes>
        </Routing>
        <Console name="LogToConsole" target="SYSTEM_OUT">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="TestCases" level="info" additivity="false">
            <AppenderRef ref="LogToConsole"/>
            <AppenderRef ref="MyRoutingAppender"/>
        </Logger>
        <Logger name="PageObjects" level="info" additivity="false">
            <AppenderRef ref="LogToConsole"/>
            <AppenderRef ref="MyRoutingAppender"/>
        </Logger>
        <Root level="info">
            <AppenderRef ref="LogToConsole"/>
        </Root>
    </Loggers>
</Configuration>

Вот что у меня есть в моем java классе:

    package TestCases.Groups;

    public class AddDeleteGroup extends TestInit {
        private final Logger logger = LogManager.getLogger(AddDeleteGroup.class.getName());

        @BeforeClass
        public void beforeClass() {
            String threadId = String.valueOf(Thread.currentThread().getId());
            ThreadContext.put("tId", threadId);
            ThreadContext.put("testGroupName", "TestCases.Groups");
            ThreadContext.put("threadName", AddDeleteGroup.class.getName());
        }

        @Test(groups = "test")
        public void setUp(){
            logger.info("SetUp method for {}", AddDeleteGroup.class.getName());
            // do stuffs
        }

        @Test(dependsOnMethods={"SetUp"})
        public void testRunner(){
            logger.info("TestRunner method for {}", AddDeleteGroup.class.getName());
            // do stuffs
        }

Консоль показывает распечатанные операторы журнала, но когда я проверяю папку журналов, я ничего не вижу.

Если кто-нибудь знает, что я делаю не так, пожалуйста, помогите мне. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Оказывается, файл "*.log" не был распознан в IntelliJ. Когда я попытался изменить тип файла на "*.txt", файлы журнала отображаются в папке.

Конфигурация работает должным образом.

0 голосов
/ 26 марта 2020

Вот для вас. Я пробовал, и это работает.
JAVA - Отдельные файлы журнала для потоков, используя log4j2

...