log4j2 记录器在一个 class 中使用时写入日志 在另一个 class 中使用时不写入

log4j2 logger writes to log when used in one class doesn't write when used in another class

Apache log4j2 记录器打印到控制台,而不是在一个 class(服务器端)运行 时打印到文件。如果放置在其他(客户端)中,相同的记录器会按预期记录到文件。

log4j2.xml 放置在正确的文件夹中(即 src\main\resources),并且适用于项目中的其他记录器。我不明白为什么记录器在一种 class(客户端)中以一种方式表现,而在另一种 class(服务器端)中以另一种方式表现。

GameLogger.java

public class GameLogger {

    public static GameLogger INSTANCE = new GameLogger();
    public static final Logger logger = LogManager.getLogger("MyGame");
    @SubscribeEvent
    public synchronized void onPlayerTick(final TickEvent.PlayerTickEvent tick) {
        if (tick.phase == Phase.END) {
            if (tick.player.isEntityAlive()) {  
                        logger.info("Logger is working");
                    }
                }
            }
        }

log4j2.xml

<RollingRandomAccessFile name="StatsFile" fileName="logs/StatsFile-latest.log" filePattern="logs/StatsFile/%d{yyyy-MM-dd-HH}{GMT}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy/MM/dd HH:mm:ss}{GMT}%msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <OnStartupTriggeringPolicy />
            </Policies>
        </RollingRandomAccessFile>

<Logger level="info" name="MyGame" additivity="false">
            <AppenderRef ref="StatsFile" />
        </Logger>
        <Root level="all">
            <AppenderRef ref="FmlSysOut" level="INFO" />
            <AppenderRef ref="ServerGuiConsole" level="INFO" />
            <AppenderRef ref="FmlFile"/>
        </Root>

只需添加

-Dlog4j.configurationFile=/src/main/resources/log4j2.xml

在 vm 参数中。