Estou usando o @Slf4j do import lombok.extern.slf4j.Slf4j;
Grava os logs blz
Só que estou querendo separar por dia, e toda sexta apagar os logs dos últimos 7 dias.
Hoje ele grava neste arquivo somente
Estou usando o @Slf4j do import lombok.extern.slf4j.Slf4j;
Grava os logs blz
Só que estou querendo separar por dia, e toda sexta apagar os logs dos últimos 7 dias.
Hoje ele grava neste arquivo somente
Segue referência como fazer usando slf4j com logback:
https://www.baeldung.com/java-logging-rolling-file-appenders#3-rolling-based-on-time
É necessário criar um appender RollingFileAppender junto com a policy: TimeBasedRollingPolicy.
Caso seja log4j em vez de logback, tb há um exemplo no mesmo link.
Não entendi muito como fazer
Primeiro tem que saber qual implementação de log seu projeto está usando: log4j, logback, etc. Depois vc deve procurar o arquivo de configuração de acordo com a implementação usada e adicionar o appender nesse arquivo.
Estou usando o slf4j do lombok
A anotação do SLF4J do lombok é apenas para gerar isso no código:
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
Porém, ainda sim, o SLF4J vai precisar ter uma implementação para funcionar, pois ele é apenas a especificação, ou seja, vc precisará ter no classpath alguma dependencia para o SLF4J usar. E essa implementação pode ser o log4j, logback ou qualquer outro (esses 2 são os mais famosos). Vc consegue verificar isso nas dependências do seu projeto.
Pergunto isso, pq, cada implementação vai ter sua forma de configurar os appenders. Por isso é importante saber qual seu projeto está usando.
Veja: SLF4J Manual
Pelo que entendi não estou usando nenhuma implementação.
O que eu faço para mostrar os logs
Na classe
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
public class JobEnvioEmailService implements Serializable {@Scheduled(cron = “0 50 1 * * *”, zone = TIME_ZONE)
public void envioEmail() {
log.info("Inicio job envio de email: " + now());
arquivos();
log.info("Fim job envio de email: " + now());
}
}
Pelo que vi aqui, parece que o spring usa o logback por padrão. Vc pode tentar configurar um logback.xml
na pasta resource usando o schema que postei antes.
Logback docs: Chapter 4: Appenders
Criei o logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_LOCATION" value="/var/log/gestao" />
<appender name="CONSOLE"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} - %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_LOCATION}/crud-api.log</File>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level - %logger{36} -
%msg%n</pattern>
</encoder>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_LOCATION}/arquivo/crud-api-%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
Mas o nome não está com data. Ou só muda o nome amanha ?
crud-api.log (44,7,KB)
Não tenho certeza, mas parece que o log do dia não fica com a data. Em algum momento talvez ele seja renomeado. Mas vou dá uma pesquisada aqui para ver se acho alguma referência.
Iniciei o servidor local hoje, ele salva o arquivo de ontem em outra pasta. Cria um do zero hoje. Vou subir para produção e ver como fica.