Регистратор 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.