為什麼Log4j2記錄器只印到控制台而不寫入檔案?

為什麼Log4j2記錄器只印到控制台而不寫入檔案?

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 參數中。

相關內容