¿Por qué el registrador Log4j2 solo imprime en la consola y no escribe en un archivo?

¿Por qué el registrador Log4j2 solo imprime en la consola y no escribe en un archivo?

El registrador Apache Log4j2 imprime en la consola, no en el archivo, cuando se ejecuta en el lado del servidor. El mismo registrador, si se coloca en el lado del cliente, registra el archivo como se esperaba. Esto funcionó bien en la versión 1.7.10, pero cuando se pasó de 1.7.10 a 1.8.9, el registrador ya no registra el archivo sino que imprime en la consola.

El log4j2.xml se coloca en la carpeta correcta (es decir, src\main\resources) y funciona para otros registradores. No entiendo por qué el registrador se comporta de una manera en el lado del cliente y de otra manera en el lado del servidor.

¿Alguien enfrenta un problema similar con el registrador de la versión 1.7.10 a 1.8.9? ¿Tiene esto algo que ver con la desaprobación del autobús para el registro de eventos? Se agradece cualquier ayuda.

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>

El registrador funciona bien si lo coloco en una clase de cliente separada con registro de ticks del cliente. Se imprime en el archivo de registro como se esperaba, pero por alguna razón no hace lo mismo cuando se coloca en la clase del lado del servidor.

Respuesta1

Solo faltaba agregar

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

en los argumentos de vm.

información relacionada