LogCaptor: Simplificando o Teste de Logs em APIs REST Java
Tags: java, teste
Published: 2024-03-12 02:08:58

Olá devs, nesse artigo eu quero falar sobre uma lib que conheci a pouco tempo e me ajudou em demasia no serviço ela se chama: LogCaptor, você encontra ela no maven repository neste link: 
[Maven Repository](https://mvnrepository.com/artifact/io.github.hakky54/logcaptor
)

Sobre a documentação é bem rica, você encontra no github neste link: 
[GitHub](https://github.com/Hakky54/log-captor)

Você deve estar se perguntando, ok Diego, mas do que se trata essa lib e, por que eu teria interesse nela?

Bem eu explico jovem mancebo, O LogCaptor é uma biblioteca Java que torna o teste de logs em APIs REST muito mais fácil e eficiente. Ele permite que você capture e valide logs de forma programática, o que pode ser extremamente útil para garantir que sua API esteja funcionando como esperado.

Benefícios do LogCaptor
Facilidade de uso: O LogCaptor é fácil de se usar. Você só precisa adicionar a biblioteca ao seu projeto e usar algumas anotações simples para capturar e validar logs.
Flexibilidade: O LogCaptor é flexível. Você pode capturar logs de qualquer nível de severidade e de qualquer fonte.
Precisão: O LogCaptor é preciso. Você pode ter certeza de que os logs que você captura são os mesmos que os logs que são gravados no console ou em um arquivo. 

É muito fácil de se usar, eu provo usando um exemplo abaixo, para esse artigo eu criei um crud bem simples você pode fazer o clone dele direto aqui: [Clone](https://github.com/diegoSbrandao/Log-Captor.git) ou acessar o repositório aqui: [Repositório](https://github.com/diegoSbrandao/Log-Captor)


A API, se trata de um simples CRUD, para criar um funcionário contendo: id, nome, salário, idade e gênero, o foco é o teste:

Abaixo o service que iremos testar os logs:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ve5gyioa1m2tgg6q0h26.png)

Neste caso vamos realizar dois testes, um de sucesso e outro de erro, para avaliar os logs;

O primeiro caso irá verificar o log em caso de sucesso:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rp2ey1riypseq80ipviv.png)

A saída, mostrando o log:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vwq7zzyk4z3wvo6gg7am.png)

Teste efetuado com sucesso, agora um exemplo quando ocorre um erro:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wnzzpkzyet3n4lnj1twn.png)

A saída do log de erro:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j9yy70g8foxlc0baqa94.png)

Basicamente para realizar esses testes, eu tive que colocar apenas essas linhas de código:

Nos parênteses, você coloca a sua classe que irá testar os logs.
        

```
LogCaptor logCaptor = LogCaptor.forClass(EmployeeServiceImpl.class);
```


E aqui abaixo apenas uma sugestão de uso, nesse link pode encontrar mais exemplos: [GitHub](https://github.com/Hakky54/log-captor?tab=readme-ov-file#tested-logging-libraries ) Mas, basicamente o que estou fazendo é conferir se o log que inclui na minha classe service, está saindo de acordo, no caso o log.error se a mensagem está igual.
  
```
    assertThat(logCaptor.getLogs())
                .contains("Erro ao salvar funcionário: {}");
    }
```

Claro que além disso, precisamos das lib no nosso pom.xml logo que inicei o artigo já te indiquei onde conseguir a lib mais atual e o tutorial, mas caso quiser:

MAVEN:

```
        <dependency>
            <groupId>io.github.hakky54</groupId>
            <artifactId>logcaptor</artifactId>
            <version>2.9.2</version>
            <scope>test</scope>
        </dependency>
```

GRADLE:

```
testImplementation 'io.github.hakky54:logcaptor:2.9.2'
```


Essa lib é compatível com:
SLFJ4
Logback
Java Util Logging
Apache Log4j
Apache Log4j2
Log4j with Lombok
Log4j2 with Lombok
SLFJ4 with Lombok
JBossLog with Lombok
Java Util Logging with Lombok
Spring Boot Starter Log4j2
Google Flogger

No meu projeto eu utilizei:

```
       <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.22.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.22.0</version>
        </dependency>
```

Bem é isso, se curtiu ou se encontrou algum bug favor me informe e, se gostou dá uma curtida, até a próxima.