Estou usando o Log4j2 e preciso que meus logs:
- Inclua a data atual e o ID do processo no nome do arquivo de log ativo (por exemplo, logname.529628.27-04-2025.log)
- crie um novo log com base no tamanho do arquivo (por exemplo, a cada 10 MB)
- Mantenha apenas um número máximo de arquivos antigos (como 10 backups)
isso é o que eu tenho agora:
<?xml version="1.0" encoding="UTF-8"?>
<Properties>
<Property name="LOG_PATTERN">
%-40.40c{1.} : %notEmpty{%m}%n%ex
</Property>
<Property name="PID">${sys:PID}</Property>
<Property name="FS">${sys:file.separator}</Property>
<Property name="log-path">log${sys:file.separator}</Property>
<Property name="log-pattern">%d{yyyy-MM-dd HH:mm:ss,SSS} PID:${sys:PID} %-2p [T@%tid-%t] [%F:%L] %notEmpty{%marker} %m%n</Property>
</Properties>
<Appenders>
<Routing name="Routing">
<Routes pattern="$${sys:logName}">
<Route key="testlog">
<RollingFile name="ArchiveLog" fileName="${log-path}logname.${sys:PID}.${date:dd-MM-yyyy}.log"
filePattern="${log-path}logname.${sys:PID}.${date:dd-MM-yyyy}.%i.log">
<PatternLayout pattern="${log-pattern}"/>
<Policies>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<DefaultRolloverStrategy max="10">
</DefaultRolloverStrategy>
</RollingFile>
</Route>
</Routes>
</Routing>
</Appenders>
<Loggers>
<Logger name="logname" level="trace" additivity="false">
<AppenderRef ref="Routing" />
</Logger>
<Root level="info">
<AppenderRef ref="Routing"/>
</Root>
</Loggers>
Mas parece que a rotação por tamanho não está funcionando corretamente em nomes de arquivos dinâmicos. Alguma ideia?
obrigado!
A rotação não está funcionando porque o anexador RollingFile do Log4j2 precisa que o fileName ativo permaneça estático, adicioná
${date}
-lo confunde o rollover.Para corrigir o problema, mantenha fileName simples e estático e use o padrão %d somente em filePattern para que o Log4j2 possa manipular a rotação e os backups baseados em tamanho corretamente.
Substitua seu
<RollingFile>
por isto: