# Groveman: The best logging for Dart/Flutter applications 🐛

Sabemos que nenhum desenvolvedor Flutter vive apenas de *debugPrint*_(não em teoria)_ e que dentro deste universo de packages temos os tão amados packages de logging e cada um deles com suas peculiaridades. 

De modo geral muitos destes packages vão além da função de ajudar no **debug e mostrar logs de forma legível e organizada,** chegam até ao ponto de **ajudar em adicionar observabilidade e contexto em aplicativos já em produção**. Desta vez vou apresentar o package [**Groveman**](https://pub.dev/packages/groveman).

# Na voz do dev

Fiz três perguntas ao [Kauê Martins](https://kmartins.dev/), mantenedor e criador do package **Groveman** e ele dá um panorama de pôr qual razão o Groveman existe.

>>> O Groveman basicamente é uma versão do Timber do ecossistema Android só que para Flutter, que visa melhorar o gerenciando dos logs de uma aplicação, cito como exemplo, a possibilidade de exibir determinados logs de acordo com o flavor do seu aplicativo.Groveman (Homem do bosque) é pra passar a ideia de realmente alguém está plantando uma árvore (Groveman.plantTree)._Martins, Kauê; 2022._

# Usando

Você pode começar adicionando as dependências do `pubspec.yaml` ou chamando o cli `flutter pub add groveman`. Depois disso só basta inicializar o logging. 
Uma coisa bem legal aqui, é que você pode adicionar várias *trees* e cada uma delas desempenhar um papel diferente.

```dart
void main(){  
    Groveman.plantTree(DebugTree()); // Mostra logs somente em debug...
```

Podemos usar 5 níveis de logging : **fatal, error, warning, info, debug**. 

```dart 
Groveman.debug(); 
Groveman.info('info', tag: 'info'); 
Groveman.warning('error', tag: 'info', 
  extra: <String, Object>{
     'name': 'Jungle',
     'trees': 50,
   }, ); 
Groveman.error('info', tag: 'info', error: Error());
Groveman.fatal('info', tag: 'info', stackTrace: StackTrace.current);
```
>>>Segundo o readme.md : '_There are no Tree implementations installed by default because, second Timber, every time you log in production, a puppy dies._'

# Estendendo 

Também podemos usar outras *Trees* e enviar os logs para um serviço como o Sentry por exemplo, esses *Trees* adicionais são disponibilizadas em packages separados, temos o [Groveman Sentry](https://pub.dev/packages/groveman_sentry) e o [Groveman Crashlytics](https://pub.dev/packages/groveman_crashlytics).

Caso em sua stack você use um outro serviço de logging como por exemplo o **ElasticSearch** ou **Datadog** você pode simplesmente implementar sua própria *Tree* e nela você decide o que é importante ou não.

# Finalizando

O package Groveman encara e resolve bem os problemas comuns no desenvolvimento de apps Flutter com uma mensagem legal de consciência social. Não se esqueça, plante arvores. 🌳🌳🌳
