# 📜 **Logging - DEJO Node**

## 📌 **Visão Geral**
O **DEJO Node** implementa um sistema de logging estruturado para **monitoramento, auditoria e depuração** do funcionamento da blockchain. Utilizamos **Zap (Uber-go)** para logs de alto desempenho e baixa latência.

---

## **1️⃣ Níveis de Log**
Os logs seguem uma hierarquia de severidade:
- **DEBUG** → Informações detalhadas para desenvolvimento.
- **INFO** → Eventos operacionais normais.
- **WARN** → Eventos que podem exigir atenção.
- **ERROR** → Problemas que impactam a funcionalidade, mas não interrompem o serviço.
- **FATAL** → Falhas críticas que resultam no encerramento do serviço.

---

## **2️⃣ Exemplo de Configuração de Logging**
📌 **Trecho do `config.yaml`**:
```yaml
logging:
  level: "info"
  output: "stdout"  # Pode ser "stdout", "file" ou "json"
  filePath: "/var/log/dejo-node.log"
  format: "json"     # Pode ser "json" ou "console"
```

📌 **Trecho de código usando Zap:**
```go
package logger

import (
    "go.uber.org/zap"
)

var log *zap.Logger

func InitLogger(level string) {
    var err error
    cfg := zap.NewProductionConfig()
    cfg.Level = zap.NewAtomicLevelAt(parseLogLevel(level))
    log, err = cfg.Build()
    if err != nil {
        panic("Erro ao inicializar logger: " + err.Error())
    }
}

func Info(msg string, fields ...zap.Field) {
    log.Info(msg, fields...)
}

func Error(msg string, fields ...zap.Field) {
    log.Error(msg, fields...)
}

func Fatal(msg string, fields ...zap.Field) {
    log.Fatal(msg, fields...)
}
```

---

## **3️⃣ Exemplo de Saída de Log**
📌 **Formato JSON:**
```json
{
  "level": "info",
  "timestamp": "2025-03-18T12:00:00Z",
  "message": "Novo bloco minerado",
  "blockHeight": 10234,
  "hash": "0xa7b9c..."
}
```

📌 **Formato Console:**
```
[INFO] 2025-03-18T12:00:00Z Novo bloco minerado | blockHeight=10234 hash=0xa7b9c...
```

---

## **4️⃣ Integração com Monitoramento**
- Logs podem ser enviados para **Elastic Stack (Elasticsearch + Kibana)**.
- Suporte a **Fluentd** para roteamento de logs para múltiplos destinos.
- **Prometheus e Grafana** podem coletar métricas baseadas nos logs.

---

📌 **Este documento será atualizado conforme novas funcionalidades forem adicionadas.**

🚀 **DEJO Node: Logging estruturado para máxima observabilidade!** 🔥