BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Google Flogger - um novo framework Java para logs

Google Flogger - um novo framework Java para logs

O Google recentemente anunciou o lançamento de um novo framework open source Java para logs chamado Flogger. Reconhecendo que "a área de APIs open source Java para logs já está superlotada", o Google afirma que o Flogger oferece "muitos benefícios sobre as APIs de logs existentes". Essas melhorias incluem a redução no custo de mensagens de logs desabilitadas, melhoria geral na legibilidade e a extensibilidade de sua API.

O Flogger, uma combinação entre as palavras fluent e logger, argumenta que um dos seus principais benefícios é que "o log em níveis desabilitados é efetivamente sem custo". Enquanto outros frameworks de log podem gerar bytecode mesmo quando o log está desabilitado, o Flogger foca em evitar isso completamente.

Mais especificamente, frameworks de log tipicamente utilizam varargs para aceitar um número de parâmetros desconhecidos em uma chamada a um método, ao invés de ter centenas, ou até milhares, de diferentes e imprevisíveis assinaturas de métodos. Este uso de varargs resulta em bytecode adicional, particularmente para alocar um Object[] para armazenar o varargs. Enquanto que um pouco de bytecode a mais normalmente não é uma preocupação, ela se torna particularmente importante em aplicações com um granularidade alta de logs ou quando os logs acontecem em um loop.

O Flogger evita este custo através do design de sua API. O encadeamento de chamadas à API sempre começa com um seletor de um nível de log específico, por exemplo, atInfo(). Este seletor retorna uma implementação para logar no nível especificado e, no caso do log estar desabilitado, uma implementação singleton não operacional pode ser retornada.

Legibilidade é outra área em que o Flogger traz muitas melhorias. De acordo com o Google, o Flogger permite uma melhor "auto documentação dos logs" através do uso de sua API fluente. Como um exemplo, considere uma instrução de log típica que registra um erro junto com sua exceção.

log.error("The arg, '{}' caused an error", arg, exception)

A mesma instrução pode ser codificada no Flogger utilizando:

logger.atError()
      .withCause(exception)
      .log("The arg, ‘%s’ caused an error", arg);

Além das melhorias na legibilidade, o Flogger foi projetado com extensibilidade em mente e permite extensões customizadas. Utilizando o Flogger, é "possível estender localmente a API e adicionar métodos na interface fluente".

Até o momento, a documentação e exemplos de extensões customizadas são limitadas, mas um exemplo, dado pelo Google, é a criação de um UserLogger que faz o log por usuário, escrevendo o log separadamente do log principal.

logger.at(INFO)
      .forUserId(id)
      .log("Message: %s", param);

Maiores informações sobre o Flogger podem ser encontradas na página do Flogger no GitHub, além de um guia inicial e documentação sobre melhores práticas.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT