Melhores práticas para impressão de logs

Melhores práticas para impressão de logs

Por que o título deve ser registrado?

Imprimir depuração : utiliza logs para registrar variáveis ​​​​ou uma determinada parte da lógica, e registrar o processo de funcionamento do programa, ou seja, quais códigos o programa executa, de forma a facilitar a solução de problemas lógicos.

Localização do problema : Localize rapidamente o problema quando o programa estiver anormal ou falhar, para que seja conveniente resolver o problema posteriormente. Como o ambiente de produção online não pode ser depurado, é preciso tempo e esforço para simular um ambiente de produção no ambiente de teste. Portanto, é muito importante contar com as informações registradas no log para localizar o problema.

Monitoramento de Alarmes e Auditoria de Comportamento do Usuário : Após a formatação, o log pode ser configurado com uma visualização de monitoramento multidimensional através do sistema de monitoramento relevante (AntMonitor), para que possamos captar o status de operação do sistema ou registrar o comportamento de operação do usuário e coletar e analisar o registro para construir um uso no mercado de negócios

Quando os logs são registrados?

Ao inicializar o código ou ao inserir a entrada lógica : os parâmetros de inicialização do sistema ou serviço. O processo de inicialização do módulo principal ou componente geralmente depende de algumas configurações principais e diferentes serviços serão fornecidos de acordo com parâmetros diferentes. Certifique-se de registrar o log INFO aqui, imprimir os parâmetros e a descrição do serviço do estado de conclusão da inicialização.

Exceções de linguagem de programação : esse tipo de exceção detectada é o que o sistema informa ao desenvolvedor para prestar atenção e é um relatório de erros de altíssima qualidade. Os logs devem ser registrados corretamente e o nível WARN ou ERROR deve ser utilizado de acordo com a situação real do negócio.

As expectativas do processo de negócios não correspondem : Quando os resultados no código do projeto não correspondem às expectativas, também é um dos cenários de log. Simplificando, todas as ramificações do processo podem ser consideradas. Cabe ao desenvolvedor julgar se a situação pode ser tolerada. Cenários comuns adequados incluem parâmetros externos incorretos, problemas de processamento de dados que resultam em códigos de retorno que não estão dentro de um intervalo razoável e assim por diante.

Ações-chave da lógica central do sistema/negócio : As ações de negócios desencadeadas por funções principais no sistema precisam de mais atenção e são indicadores importantes para medir a operação normal do sistema. Recomenda-se registrar logs de nível INFO.

Chamada remota de serviço de terceiros : Um ponto importante no sistema de arquitetura de microsserviços é que o terceiro nunca pode ser confiável. Para chamadas remotas de serviço de terceiros, recomenda-se imprimir os parâmetros de solicitação e resposta, o que é conveniente para localizar problemas em cada terminal e não serão causados ​​por terceiros.A ausência de logs de serviço torna-se esmagadora.

日志格式一般需包含以下几类关键信息:


调用时间
日志链路id(traceId、rpcId)
线程名
接口名
方法名
调用耗时
调用是否成功(Y/N)
错误码
系统上下文信息(调用系统名、调用系统ip、调用时间戳、是否压测(Y/N))

2022-12-12 06:05:05,129 [0b26053315407142451016402xxxxx 0.3 - /// - ] INFO [SofaBizProcessor-4-thread-333] - [(interfaceName,methodName,1ms,Y,SUCCESS)(appName,ip地址,时间戳,Y)


详细日志

详细日志是用于补充摘要日志中的一些业务参数的日志文件,用于问题排查。详细日志一般包含以下几类信息:

调用时间
日志链路id(traceId、rpcId)
线程名
接口名
方法名
调用耗时
调用是否成功(Y/N)
系统上下文信息(调用系统名、调用系统ip、调用时间戳、是否压测(Y/N))
请求入参
请求出参

2022-12-12 06:05:05,129 [0b26053315407142451016402xxxxx 0.3 - /// - ] INFO [SofaBizProcessor-4-thread-333] - [(interfaceName,methodName,1ms,Y,SUCCESS)(appName,ip地址,时间戳,Y)(参数1,参数2)(xxxx)

日志记录原则

隔离性:日志输出不能影响系统正常运行;

安全性:日志打印本身不能存在逻辑异常或漏洞,导致产生安全问题;

数据安全:不允许输出机密、敏感信息,如用户联系方式、身份证号码、token等;

可监控分析:日志可以提供给监控进行监控,分析系统进行分析;

可定位排查:日志信息输出需有意义,需具有可读性,可供日常开发同学排查线上问题。

imprimir destaques do log

1. Prevenir NPE

2. É proibido usar System.out.println() para gerar logs.
Motivo: Este log de impressão é um log de console e é um método síncrono. A alta simultaneidade afetará o desempenho e os logs não podem ser coletados uniformemente.

3. O aplicativo não pode usar diretamente a API no sistema de log (Log4j, Logback), mas deve contar com a API na estrutura de log (SLF4J, JCL – Jakarta Commons Logging).
Motivo: o sistema de registro precisa ser desacoplado do código

4. Declarar o objeto da ferramenta de log O logger deve ser declarado como privado static final
Razões: private evita que o objeto de log seja usado ilegalmente por outras classes
static evita a duplicação de novos objetos de log, evita que eles sejam serializados e reduz os riscos de segurança
final No ciclo de vida da classe, não há necessidade de alterar o logger para evitar que o logger seja modificado durante o tempo de execução do programa.

5. Não use e.printStackTrace() para imprimir logs após capturar uma exceção.
Motivo: A string gerada pela instrução e.printStackTrace() registra informações da pilha. Se as informações forem muito longas, o bloco de memória onde o pool de constantes da string está localizado não tem espaço., ou seja, a memória está cheia e a solicitação do sistema será bloqueada.

6. Não imprima logs sem sentido (sem contexto de negócios, sem ID de link de log associado)

7. É proibido usar JSON para imprimir objetos na impressão de log, você deve usar o método toString() ou ToStringBulider do apache

8. Proibição de impressão de informações sensíveis

9. Use o inglês tanto quanto possível para a impressão de registros.
Motivo: Tente usar a saída em inglês ao imprimir registros para evitar caracteres ilegíveis na impressão devido a inconsistências entre códigos e terminais chineses, o que interferirá na localização de falhas e na solução de problemas.

10. Para chamar uma interface de terceiros, você deve imprimir os parâmetros de entrada e saída

Acho que você gosta

Origin blog.csdn.net/HX0326CSDN/article/details/130516180
Recomendado
Clasificación