简体   繁体   English

Log4j2 - 无法将日志写入文件

[英]Log4j2 - Cannot write logs to a file

I'm attempting to use log4j2 to write log statements to both console and log files.我正在尝试使用 log4j2 将日志语句写入控制台和日志文件。 However, when I check the log folder, nothing is being created.但是,当我检查日志文件夹时,没有创建任何内容。

The idea is to use the RoutingAppender to have all the test classes of each package in one folder.这个想法是使用 RoutingAppender 将每个包的所有测试类都放在一个文件夹中。

Here is the log4j2.xml file:这是 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>

Here is what I'm having in my java class:这是我在我的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
        }

The console shows the log statements being printed out, but when I check the logs folder, I do not see anything.控制台显示正在打印的日志语句,但是当我检查日志文件夹时,我什么也没看到。

If anyone has any idea what I'm doing wrong, please help me out.如果有人知道我做错了什么,请帮助我。 Thanks in advance.提前致谢。

Here is for you.这是给你的。 I've tried and it works.我试过了,它有效。
JAVA - Separate log files for threads using log4j2 JAVA - 使用 log4j2 为线程分离日志文件

It turns out the "*.log" file wasn't being recognized in IntelliJ.事实证明,IntelliJ 无法识别"*.log"文件。 When I tried changing the file type to "*.txt" , the log files are being displayed in the folder.当我尝试将文件类型更改为"*.txt" ,日志文件显示在文件夹中。

The configuration works as expected.配置按预期工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM