Skip to content

Adiciona o logger v2 para criar arquivos de log de nome único e que não rotacionam internamente#13

Merged
joaoarthurlm merged 9 commits intodevfrom
topic-simplica-arquivos-log
Feb 11, 2026
Merged

Adiciona o logger v2 para criar arquivos de log de nome único e que não rotacionam internamente#13
joaoarthurlm merged 9 commits intodevfrom
topic-simplica-arquivos-log

Conversation

@gabrielferreira-gaudium
Copy link
Contributor

MchLogToolkitGo - Logger v2

Descrição

Adiciona ao MchLogToolkitGo uma versão atualizada do logger (chamada v2) na qual os arquivos gerados de um tipo (parâmetro subject) são chamados /<subject>/<subject>.log. Por ex., para o tipo "error", o arquivo será: /error/error.log.

Com essa alteração, não mais serão gerados múltiplos arquivos de log de cada tipo, e a rotação de logs não será mais feita internamente pelo MchLogToolkitGo.

É possível determinar a versão do logger a ser utilizada a partir da função pública SetVersion().

A estrutura dos arquivos foi levemente modificada:

  • mchlogcoreV1/mchlogV1.go : Exatamente o mesmo código do logger atual (o que reside em mchlogcore/mchlog.go)
  • mchlogcoreV2/mchlogV2.go : Versão atualizada do logger
  • mchlogcore/mchlog.go : Agora serve para configurar qual a versão do logger deve ser utilizada

Tipo de Mudança

  • Correção de Bug: Esta alteração resolve um problema existente no projeto.
  • Nova Funcionalidade: Adição de uma nova funcionalidade que enriquece o projeto.
  • Melhoria de Código: Refatoração que melhora a performance ou legibilidade do código sem alterar funcionalidades.
  • Breaking Change: Alteração significativa que afeta a compatibilidade com versões anteriores, requerendo atenção especial durante a integração.
  • Internacionalização e Localização: Adição ou melhoria no suporte de múltiplos idiomas ou adaptações regionais.
  • Desempenho: Melhorias que aumentam a eficiência e velocidade do sistema.
  • Segurança: Correções ou melhorias que aumentam a segurança do projeto.
  • Dependências: Atualizações ou adições em bibliotecas e pacotes externos.
  • Testes: Adição ou melhoria nos testes do projeto, incluindo testes unitários, bdd, etc.
  • Infraestrutura/DevOps: Mudanças relacionadas à configuração de infraestrutura, CI/CD, ferramentas de desenvolvimento, alteração de config etc.

Checklist

  • Testei o código localmente
  • Revisei o código (self-review)
  • Comentei meu código, especialmente em áreas difíceis de entender
  • Fiz alterações correspondentes na documentação
  • Minhas alterações não geram novos warnings
  • Novos e existentes testes unitários passam localmente com minhas alterações
  • Chequei se o PR cumpre os critérios de aceitação da issue relacionada

Como testar as alterações

Ao testar um um serviço que use o novo logger, ao inicializar o serviço, a primeira mensagem em /applog/<serviço>/info/info<?>.log deve ser a versão do logger utilizada.

Pelo nome dos arquivos de log gerados nas pastas dentro de /applog/<serviço>/ do serviço, é possível determinar a versão do logger também.

Impactos no Deploy

Importante adicionar aos microsserviços que usarem este logger com a implementação atual uma flag no arquivo .conf para determinar a versão (v1 ou v2); sendo a padrão a v1.

Dependências

Não há.

Issues

Não há.

Observações Adicionais

Não há.

@gemini-code-assist
Copy link

Summary of Changes

Hello @gabrielferreira-gaudium, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

Este pull request introduz uma nova versão do sistema de logging, o Logger V2, que visa otimizar a forma como os arquivos de log são gerados e gerenciados. Ao invés de múltiplos arquivos rotacionados internamente, a V2 cria um arquivo único por tópico, simplificando a estrutura e a manutenção. A mudança é implementada de forma a permitir a escolha entre a versão original (V1) e a nova (V2), garantindo compatibilidade e flexibilidade para os serviços que utilizam a biblioteca.

Highlights

  • Introdução do Logger V2: Foi adicionada uma nova versão do logger (V2) que simplifica a gestão de arquivos de log, criando um único arquivo por 'subject' (tópico) sem rotação interna.
  • Refatoração da Versão Original (V1): A implementação original do logger foi movida para um novo pacote e arquivo (mchlogcoreV1/mchlogV1.go), preservando sua funcionalidade e permitindo a coexistência com a V2.
  • Mecanismo de Seleção de Versão: O arquivo mchlogcore/mchlog.go foi refatorado para atuar como um 'facade' ou dispatcher, permitindo que os usuários selecionem qual versão do logger (V1 ou V2) desejam utilizar através da função SetVersion().
  • Nomenclatura Simplificada de Arquivos de Log: A V2 adota uma convenção de nomenclatura de arquivos de log mais simples, onde os logs para um determinado 'subject' são armazenados em /<subject>/<subject>.log, eliminando o IP e o timestamp do nome do arquivo.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • mchlogcore/mchlog.go
    • Transformado em um dispatcher para as versões V1 e V2 do logger.
    • Removida toda a lógica de logging, manipulação de arquivos e obtenção de IP, que foram movidas para os pacotes mchlogcoreV1 e mchlogcoreV2.
    • Adicionada a enumeração LogVersion (V1, V2) e a função SetVersion() para alternar entre as implementações.
    • Os métodos LogSubject, GetFileNameFromStreamName e GetIP agora delegam suas chamadas para a versão do logger atualmente selecionada.
  • mchlogcoreV1/mchlogV1.go
    • Novo arquivo adicionado, contendo a implementação completa do logger original (anterior a este PR).
    • Preserva a funcionalidade de logging com rotação de arquivos baseada em timestamp e inclusão de IP no nome do arquivo.
  • mchlogcoreV2/mchlogV2.go
    • Novo arquivo adicionado, contendo a nova implementação do Logger V2.
    • Implementa a criação de arquivos de log de nome único por 'subject' (/<subject>/<subject>.log), sem rotação interna.
    • Remove a inclusão de IP e timestamp do nome do arquivo de log.
    • Otimiza a gestão de arquivos de log através de um cache de loggers, evitando a abertura e fechamento repetidos de arquivos.
Activity
  • O autor gabrielferreira-gaudium criou este pull request para adicionar o Logger V2, conforme descrito no título e corpo do PR.
  • O pull request foi marcado como 'Nova Funcionalidade' e 'Desempenho', indicando a adição de novos recursos e melhorias de eficiência.
  • O autor realizou testes locais e uma auto-revisão do código, garantindo a qualidade inicial da implementação.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

Este pull request introduz uma nova versão (v2) do logger, que simplifica a nomenclatura dos arquivos de log e remove a rotação interna, ao mesmo tempo que mantém a versão antiga (v1) para retrocompatibilidade. A arquitetura utiliza um padrão Facade para alternar entre as versões.

A refatoração é bem-vinda e a nova implementação v2 é mais simples e performática ao evitar a comunicação por canais e ao fazer cache dos loggers.

No entanto, identifiquei alguns pontos críticos que precisam de atenção:

  • Segurança de Concorrência (Race Condition): A forma como a versão do logger é selecionada através de uma variável global (currentVersion) não é segura para uso em goroutines concorrentes, o que pode levar a comportamento inesperado ou pânico.
  • Tratamento de Erros: A nova implementação v2 pode descartar logs silenciosamente se houver uma falha ao abrir o arquivo de log, o que é um comportamento arriscado para um sistema de logging.
  • Permissões de Arquivo: A implementação v1 (que foi movida) utiliza permissões de arquivo e diretório inseguras, o que foi corrigido na v2. Seria bom aplicar a mesma correção na v1 para consistência e segurança.

Detalhei esses pontos nos comentários específicos no código. No geral, as mudanças são positivas, mas os problemas de concorrência e perda de logs precisam ser resolvidos antes do merge.

@joaoarthurlm joaoarthurlm merged commit 2045bb1 into dev Feb 11, 2026
1 check passed
@joaoarthurlm joaoarthurlm deleted the topic-simplica-arquivos-log branch February 11, 2026 11:30
@joaoarthurlm joaoarthurlm mentioned this pull request Feb 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants