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 인수에서.