Apache Log4j2 記錄器在伺服器端執行時會列印到控制台而不是檔案。如果將相同記錄器放置在用戶端,則會如預期記錄到檔案。這在版本 1.7.10 上運作良好,但從 1.7.10 轉換到 1.8.9 時,記錄器不再記錄到文件,而是列印到控制台。
log4j2.xml 放置在正確的資料夾中(即 src\main\resources)並適用於其他記錄器。我不明白為什麼記錄器在客戶端以一種方式運行,而在伺服器端以另一種方式運行。
從版本 1.7.10 到 1.8.9,有人遇到類似的記錄器問題嗎?這與事件註冊的總線棄用有什麼關係嗎?任何幫助表示讚賞。
遊戲記錄器.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 參數中。