Logs por dia - resolvido

10 respostas Resolvido
spring
G

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

image

10 Respostas

L

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.

G

Não entendi muito como fazer

L

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.

G

Estou usando o slf4j do lombok

L
Solucao aceita

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

G

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());

}

}
L

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

G

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)

L

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.

G

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.

Criado 8 de dezembro de 2021
Ultima resposta 10 de dez. de 2021
Respostas 10
Participantes 2