Я застрял в конфигурации Log4j2 XML некоторое время и не могу понять, как записать в файл приложениями RollingFile и RollingRandomAccessFile.
Когда я запускаю log4j2, он успешно инициализируется, записывает журнал в консоль с помощью приложения-консолии System.out.println ().Но когда я делаю tail -f logs/error.log
или less logs/error.log
, я не вижу этого в реальном времени.Но после того, как я kill -9 $jarpid
сразу записывает в лог-файл, я вижу его в хвосте.Я думал, что хвост может заблокировать файл, но это не так.Я прочитал файл во время выполнения по nano logs/error.log
, он был пуст, и текст появлялся там только после уничтожения процесса.Я упоминал, что это может быть потому, что я использую RollingRandomAccessFile, может быть, я испытываю эту «случайность».Но RollingFile действует так же.Я попытался написать сделать другой файл (кто знает, может быть, он уже используется другим приложением).То же самое.
Действительно запутался сейчас и не могу понять.
Вот мой log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Appenders>
<RollingFile name="ErrorFile"
fileName="logs/error.log"
filePattern="logs/error-%d{MM-dd-yyyy}-%i.log.zip"
immediateFlush="false"
append="true"
ignoreExceptions="false">
<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%-5level] %d{dd.MM.yyyy HH:mm:ss} - %logger{36} - %msg%n" disableAnsi="false"/>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="250 MB"/>
</Policies>
</RollingFile>
<Console name="Console" target="SYSTEM_OUT" follow="true" ignoreExceptions="true">
<PatternLayout pattern="[%highlight{%-5level}] %d{dd.MM.yyyy HH:mm:ss} - %logger{36} - %msg%n" disableAnsi="false"/>
</Console>
</Appenders>
<Loggers>
<Root level="all" includeLocation="false">
<AppenderRef ref="ErrorFile"/>
</Root>
</Loggers>
</Configuration>
Вот мое приложение Java:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class test {
public static Logger log = LogManager.getLogger(test.class);
public static void main(String[] args) throws Exception{
while (true) {
log.debug("debug");
log.error("error");
System.out.println("JAR WORKS!"+System.currentTimeMillis());
Thread.sleep(10000);
}
}
}