Log4j2 로거가 콘솔에만 인쇄하고 파일에는 쓰지 않는 이유는 무엇입니까?

Log4j2 로거가 콘솔에만 인쇄하고 파일에는 쓰지 않는 이유는 무엇입니까?

Apache Log4j2 로거는 서버 측에서 실행될 때 파일이 아닌 콘솔에 인쇄합니다. 동일한 로거가 클라이언트 측에 배치된 경우 예상대로 파일에 기록됩니다. 이는 버전 1.7.10에서는 제대로 작동했지만 1.7.10에서 1.8.9로 전환하면 로거가 더 이상 파일에 기록되지 않고 대신 콘솔에 인쇄됩니다.

log4j2.xml은 올바른 폴더(예: src\main\resources)에 배치되며 다른 로거에서 작동합니다. 로거가 클라이언트 측에서는 한 가지 방식으로 작동하고 서버 측에서는 다른 방식으로 작동하는 이유를 이해할 수 없습니다.

버전 1.7.10에서 1.8.9까지의 로거에서 비슷한 문제에 직면한 사람이 있습니까? 이것이 이벤트 등록에 대한 버스 지원 중단과 관련이 있나요? 도움을 주시면 감사하겠습니다.

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>

클라이언트 틱 로깅을 사용하여 별도의 클라이언트 클래스에 로거를 배치하면 로거가 제대로 작동합니다. 예상대로 로그 파일에 인쇄되지만 서버측 클래스에 배치할 때 어떤 이유로 동일한 작업을 수행하지 않습니다.

답변1

추가해야 할 사항

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

vm 인수에서.

관련 정보