Log4j2-无法将日志写入文件

问题描述 投票:0回答:1

我正在尝试使用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
        }

控制台显示正在打印的日志语句,但是当我检查logs文件夹时,什么也看不到。

[如果有人知道我在做什么错,请帮助我。提前致谢。

java log4j2
1个回答
0
投票

这里是给你的。我已经尝试过了,而且效果很好。JAVA - Separate log files for threads using log4j2

© www.soinside.com 2019 - 2024. All rights reserved.