Lädt...

🔧 Logz (Logger Global em Golang) [pt-BR]


Nachrichtenbereich: 🔧 Programmierung
🔗 Quelle: dev.to

Introdução ao Logz: Um Logger Seguro e Flexível para Desenvolvedores Go e Uso Geral! 🚀

Abertura

Você está cansado de lidar com sistemas de log complicados e inseguros em suas aplicações Go? Imagine ter um logger que, além de repleto de recursos poderosos e segurança robusta, oferece uma experiência de uso incrivelmente suave para o desenvolvedor. Conheça o Logz—a solução open source que transforma totalmente seu fluxo de logging, combinando flexibilidade, segurança e integração com notificações. Seja durante o desenvolvimento local ou em ambientes de produção, o Logz está aqui para tornar seu processo de logging simples e eficaz.

Conteúdo Principal

Por que Logz?

Toda aplicação de qualidade precisa possuir um sistema de log confiável, mas na prática, o logging frequentemente é relegado a um segundo plano. Com o Logz, transformamos essa experiência ao dar ênfase a dois pilares essenciais: experiência do desenvolvedor e segurança. Veja o que diferencia o Logz:

  • Logging Orientado a Metadados:

    Anexe facilmente informações contextuais—como requestId, user, ou outros campos relevantes—a cada entrada de log. Esses dados não são apenas informações extras: eles fornecem inteligência acionável, agilizando a depuração e o monitoramento.

  • Práticas de Build Seguras:

    Logz utiliza a flag -trimpath do Go para remover caminhos absolutos sensíveis dos binários, além de recomendar a compressão dos executáveis com UPX para garantir que sejam leves e seguros. Aqui, a segurança não é opcional—ela é parte fundamental do design.

  • Opções de Saída Flexíveis:

    Seja para exibir logs no console durante o desenvolvimento ou para gravá-los em arquivos em produção, o Logz oferece total controle. Suas flags de linha de comando permitem mudar facilmente a saída ou o formato, sem impor um único fluxo rígido.

Principais Funcionalidades

O Logz vem carregado de recursos para atender todas as suas necessidades de logging:

  • Suporte a Múltiplos Formatos de Log:

    Escolha entre logs em texto, que facilitam a leitura humana, ou JSON, ideal para integração com sistemas de monitoramento.

  • Saída Alinhada e Amigável:

    Desfrute de logs formatados de forma bonita, onde timestamps, níveis e metadados permanecem alinhados e organizados. Em logs de texto, os metadados são impressos em uma segunda linha (com indentação), garantindo clareza sem poluir a mensagem principal.

  • Controle Completo via CLI:

    Com flags como --msg, --output, --metadata e --format, você tem controle total sobre cada entrada de log, podendo customizar a saída conforme necessário.

  • Integrações de Notificação:

    Logz vai além do simples registro de mensagens, suportando notificações via webhooks HTTP, ZeroMQ e DBus. Assim, você pode configurar alertas em tempo real para eventos críticos, integrando com seus sistemas de monitoramento de forma transparente.

  • Instalador Inteligente no Primeiro Uso:

    Para tornar a experiência ainda mais fluida, Logz inclui um instalador inteligente que, na primeira execução, verifica se o binário está instalado corretamente. Se não estiver, ele pode copiar o binário para o diretório apropriado (por exemplo, $HOME/.local/bin para usuários não-root ou /usr/local/bin para root) e atualizar o PATH automaticamente, garantindo que sua ferramenta esteja pronta para uso imediato.

Exemplos de Código Avançados

Exemplo 1: Logging Básico com Metadados

Execute o seguinte comando para registrar uma mensagem de debug com metadados contextuais:

logz debug \
  --msg "Depurando a nova funcionalidade com facilidade!" \
  --output "stdout" \
  --metadata requestId=12345,user=admin

Saída Esperada:

[2025-03-02T03:35:13Z] 🐛 DEBUG - Depurando a nova funcionalidade com facilidade!
                     {"requestId":"12345","user":"admin"}

Explicação:

Cada log exibe um timestamp, o nível (com um emoji para facilitar a identificação visual) e a mensagem principal. Os metadados são exibidos logo abaixo, com uma indentação que mantém a saída limpa e organizada.

Exemplo 2: Logging em Arquivo no Formato JSON

Para ambientes de produção, é comum utilizar JSON para facilitar a integração com sistemas de monitoramento. Por exemplo:

logz info \
  --msg "Serviço iniciado com sucesso." \
  --output "/var/log/meuapp/servico.log" \
  --format json \
  --metadata service=auth,version=v1.0.2

Saída Esperada (JSON):

{
  "timestamp": "2025-03-02T03:40:00Z",
  "level": "INFO",
  "message": "Serviço iniciado com sucesso.",
  "metadata": {
    "service": "auth",
    "version": "v1.0.2"
  }
}

Explicação:

As entradas de log são formatadas em JSON, permitindo que sejam facilmente processadas por agregadores de logs e sistemas de monitoramento.

Exemplo 3: Integração do Logz em um Microserviço Web

Veja como integrar Logz em um servidor HTTP no Go:

package main

import (
    "fmt"
    "net/http"
    "github.com/faelmori/logz/logger" // Ajuste o caminho conforme necessário
)

func main() {
    // Inicializa o logger com um prefixo customizado.
    log := logger.NewLogger("WebAPI: ")

    // Define um handler HTTP que loga os detalhes de cada requisição.
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        log.Info("Requisição recebida", map[string]interface{}{
            "método": r.Method,
            "caminho": r.URL.Path,
        })
        fmt.Fprintf(w, "Olá, mundo!")
    })

    // Inicia o servidor HTTP, logando seu início.
    log.Info("Iniciando servidor na porta 8080", nil)
    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatal("Falha ao iniciar servidor", map[string]interface{}{"erro": err})
    }
}

Explicação:

Cada requisição é logada com informações úteis que facilitam a análise do tráfego e a depuração de problemas. Se ocorrer um erro crítico, o log dispara um alerta via o método Fatal, que encerra o servidor.

Exemplo 4: Integração de Notificadores para Alertas em Tempo Real

Veja como você pode configurar notificadores para enviar alertas quando ocorrerem erros críticos:

package main

import (
    "time"
    "github.com/faelmori/logz/logger"
)

func main() {
    // Inicializa o logger e define metadados globais.
    log := logger.NewLogger("AlertService: ")
    log.SetMetadata("service", "payment")
    log.SetMetadata("env", "production")

    // Simula um erro que dispara um alarme.
    log.Error("Falha na transação de pagamento", map[string]interface{}{
        "transactionId": "txn_987654321",
        "timestamp":     time.Now().Format(time.RFC3339),
    })
}

Explicação:

Com os notificadores configurados no Logz, esta mensagem de erro pode, por exemplo, disparar um alerta via um webhook HTTP ou enviar uma notificação por DBus, garantindo uma resposta rápida a problemas críticos.

Exemplo 5: Instalador Inteligente no Primeiro Uso

Para aprimorar a experiência do usuário, Logz possui um instalador inteligente. No primeiro uso, o binário verifica se está corretamente instalado; se não estiver, ele se copia para o diretório apropriado e atualiza o PATH:

package main

import (
    "fmt"
    "io"
    "os"
    "os/exec"
    "path/filepath"
    "strings"
)

func isInPath() bool {
    pathEnv := os.Getenv("PATH")
    exePath, err := os.Executable()
    if err != nil {
        return false
    }
    exeDir := filepath.Dir(exePath)
    return strings.Contains(pathEnv, exeDir)
}

func updatePath(targetDir string) error {
    shell := filepath.Base(os.Getenv("SHELL"))
    var shellConfig string

    switch shell {
    case "bash":
        shellConfig = filepath.Join(os.Getenv("HOME"), ".bashrc")
    case "zsh":
        shellConfig = filepath.Join(os.Getenv("HOME"), ".zshrc")
    default:
        shellConfig = filepath.Join(os.Getenv("HOME"), ".profile")
    }

    fmt.Printf("Adicione a seguinte linha ao seu %s para incluir %s no PATH:\n", shellConfig, targetDir)
    fmt.Printf("export PATH=%s:$PATH\n", targetDir)
    return nil
}

func firstRunInstaller() {
    configFile := filepath.Join(os.Getenv("HOME"), ".logzconfig")
    if _, err := os.Stat(configFile); os.IsNotExist(err) {
        fmt.Println("Parece que é a primeira vez que você executa o Logz.")
        fmt.Print("Deseja instalar o Logz no seu sistema para facilitar o uso? (Y/n): ")
        var resp string
        fmt.Scanln(&resp)
        if strings.ToLower(resp) == "y" || resp == "" {
            exePath, err := os.Executable()
            if err != nil {
                fmt.Printf("Erro ao obter o caminho do executável: %v\n", err)
                return
            }
            targetDir := "/usr/local/bin"
            if os.Geteuid() != 0 {
                targetDir = filepath.Join(os.Getenv("HOME"), ".local", "bin")
            }
            target := filepath.Join(targetDir, "logz")
            cmd := exec.Command("cp", exePath, target)
            if err := cmd.Run(); err != nil {
                fmt.Printf("Erro durante a instalação: %v\n", err)
                return
            }
            fmt.Printf("Logz instalado em: %s\n", target)
            if err := updatePath(targetDir); err != nil {
                fmt.Printf("Falha ao atualizar o PATH: %v\n", err)
            }
            os.WriteFile(configFile, []byte("installed=true\n"), 0644)
        } else {
            os.WriteFile(configFile, []byte("skip_install=true\n"), 0644)
            fmt.Println("Instalação ignorada. Você pode instalá-lo manualmente depois.")
        }
    }
}

func main() {
    firstRunInstaller()
    fmt.Println("Logz está pronto para uso!")
}

Explicação:

Neste trecho, o programa verifica se um arquivo de configuração existe para determinar se é a primeira execução. Se for, ele questiona o usuário para instalar automaticamente o binário no diretório adequado e guia a atualização do PATH, proporcionando uma experiência “mágica” e sem complicações.

Destaques do Projeto

  • Open Source no GitHub:

    Explore o código, contribua com melhorias ou simplesmente dê uma estrela se o Logz fizer sentido para você. Confira no GitHub.

  • Documentação Detalhada:

    Toda a documentação está disponível em pkg.go.dev, proporcionando referências claras e guias de integração para facilitar sua adoção.

Conclusão e Chamada para Ação

O Logz não é apenas um logger—é uma ferramenta completa de observabilidade projetada para aplicações modernas em Go. Ao combinar práticas de build seguras, opções de saída flexíveis, manipulação rica de metadados e integrações inteligentes de notificações, o Logz capacita os desenvolvedores a monitorar e depurar suas aplicações com mais eficiência.

Experimente o Logz no seu próximo projeto Go e descubra como ele pode simplificar o seu fluxo de logging. Se o Logz facilitar sua vida, considere dar uma estrela no repositório do GitHub e compartilhar seu feedback. Juntos, podemos construir um ecossistema de logging mais inteligente, rápido e seguro—um log por vez!

...

🔧 Logz (Logger Global em Golang) [pt-BR]


📈 61.5 Punkte
🔧 Programmierung

🕵️ CVE-2024-57075 | eazy-logger 4.0.1 lib.Logger prototype pollution


📈 32.42 Punkte
🕵️ Sicherheitslücken

🕵️ CVE-2024-57075 | eazy-logger 4.0.1 lib.Logger prototype pollution


📈 32.42 Punkte
🕵️ Sicherheitslücken

🕵️ Low CVE-2021-24176: Jh 404 logger project Jh 404 logger


📈 32.42 Punkte
🕵️ Sicherheitslücken

🕵️ WeeChat up to 1.9.0 Logger Plugin logger.c denial of service


📈 32.42 Punkte
🕵️ Sicherheitslücken

🕵️ WeeChat bis 1.9.0 Logger Plugin logger.c Denial of Service


📈 32.42 Punkte
🕵️ Sicherheitslücken

🔧 DevOps with Logz.io | The DevOps Lab


📈 27.99 Punkte
🔧 Programmierung

🕵️ The Encrypted Logz - Some Simple Reverse Engineering


📈 27.99 Punkte
🕵️ Reverse Engineering

🕵️ Logz 1.3.1 art sql injection


📈 27.99 Punkte
🕵️ Sicherheitslücken

🕵️ Logz 1.3.1 art cross site scripting


📈 27.99 Punkte
🕵️ Sicherheitslücken

🎥 Logz.io | Stop wasting your time with Old-School Logging


📈 27.99 Punkte
🎥 Video | Youtube

🔧 Logz.io | Stop wasting your time with Old-School Logging | Tech Exceptions


📈 27.99 Punkte
🔧 Programmierung

🔧 Exploring Golang: Insights from the Latest Golang Nugget


📈 21.28 Punkte
🔧 Programmierung

🔧 Golang: Practical Cases to Use the Golang Sleep Method


📈 21.28 Punkte
🔧 Programmierung

🔧 GoLang JWT Authentication Using Golang Gin Framework with MongoDB


📈 21.28 Punkte
🔧 Programmierung

🔧 How to use GoLang in Flutter Application - Golang FFI


📈 21.28 Punkte
🔧 Programmierung

🕵️ GitHub Security Lab: Golang : Improvements to Golang SSRF query


📈 21.28 Punkte
🕵️ Sicherheitslücken

🔧 Using Logger Middleware in Go Fiber


📈 16.21 Punkte
🔧 Programmierung

🔧 Best Node.js Logger for Your App: errsole


📈 16.21 Punkte
🔧 Programmierung

🕵️ Micro Focus Arcsight Logger up to 7.1.0 cross site scripting


📈 16.21 Punkte
🕵️ Sicherheitslücken

🕵️ Microsoft Windows Image Acquisition Logger ActiveX Control first unknown vulnerability


📈 16.21 Punkte
🕵️ Sicherheitslücken

🎥 Yaniv Balmas: Key-logger, Video, Mouse


📈 16.21 Punkte
🎥 IT Security Video

🔧 Enhancing Error Logging in NestJS with a Custom Sentry Logger


📈 16.21 Punkte
🔧 Programmierung

🪟 Fix WHEA-Logger Fatal hardware and Event ID Errors


📈 16.21 Punkte
🪟 Windows Tipps

🕵️ Micro Focus Arcsight Logger up to 6.6 directory traversal [CVE-2019-3482]


📈 16.21 Punkte
🕵️ Sicherheitslücken

🐧 Want Git punch card back? Git-logger is your Bash friend


📈 16.21 Punkte
🐧 Linux Tipps

🔧 Enhance Your React Debugging with react-component-logger


📈 16.21 Punkte
🔧 Programmierung

🔧 Errsole: The First Node.js Logger with a Built-In Dashboard


📈 16.21 Punkte
🔧 Programmierung

🕵️ Micro Focus Arcsight Logger 7.1 cross site scripting [CVE-2020-25834]


📈 16.21 Punkte
🕵️ Sicherheitslücken

🕵️ Low CVE-2019-3485: HP Arcsight logger


📈 16.21 Punkte
🕵️ Sicherheitslücken

📰 Promising compsci student sold key-logger, pleads guilty, faces jail


📈 16.21 Punkte
📰 IT Security Nachrichten

🔧 Easy Logger - Controle de Logs Simplificado! 🚀


📈 16.21 Punkte
🔧 Programmierung

matomo