为什么 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 参数中。

相关内容