Warum druckt der Log4j2-Logger nur auf der Konsole und schreibt nicht in eine Datei?

Warum druckt der Log4j2-Logger nur auf der Konsole und schreibt nicht in eine Datei?

Der Apache Log4j2-Logger druckt auf der Serverseite in die Konsole und nicht in eine Datei. Derselbe Logger protokolliert, wenn er auf der Clientseite ausgeführt wird, wie erwartet in eine Datei. Dies funktionierte in Version 1.7.10 einwandfrei, aber beim Übergang von 1.7.10 auf 1.8.9 protokolliert der Logger nicht mehr in eine Datei, sondern druckt stattdessen in die Konsole.

Die Datei log4j2.xml befindet sich im richtigen Ordner (also src\main\resources) und funktioniert für andere Logger. Ich verstehe nicht, warum sich der Logger auf der Clientseite anders verhält als auf der Serverseite.

Hat jemand ein ähnliches Problem mit dem Logger von Version 1.7.10 auf 1.8.9? Hat das etwas mit der Bus-Veralterung für die Ereignisregistrierung zu tun? Jede Hilfe ist willkommen.

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>

Der Logger funktioniert einwandfrei, wenn ich ihn in einer separaten Client-Klasse mit Client-Tick-Protokollierung platziere. Er druckt wie erwartet in die Protokolldatei, aber aus irgendeinem Grund geschieht dies nicht, wenn er in einer serverseitigen Klasse platziert wird.

Antwort1

Musste nur noch hinzufügen

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

in den VM-Argumenten.

verwandte Informationen