As melhores práticas para registrar em log incluem:
Não use formatação nem interpolação de cadeia de caracteres. O registro em log de uma cadeia de caracteres com
$"This broke {brokenThing}"
não é útil para depuração.Passe objetos para que eles se tornem campos pesquisáveis.
Em vez de
LogInformation(LogEventIds.StartProcessing, $"Processing has started on item {Item.itemNumber}");
, use:- Um objeto como tal, como
LogInformationObject(LogEventIds.StartProcessing, Item);
ou - Objetos anônimos, como
LogInformationObject(LogEventIds.StartProcessing, new {Item.itemNumber, Item.itemDescription, someData});
.
- Um objeto como tal, como
Siga as convenções de numeração EventId descritas em LogEventIds.
Para qualquer corpo de trabalho significativo, use o seguinte padrão de registro em log:
- Use
LogInformationObject
na entrada, por exemplo, quando estiver prestes a iniciar um trabalho de codificação. - Use
LogInformationObject
em caso de êxito, por exemplo, quando o trabalho de codificação for bem-sucedido. - Use
LogWarningObject
,LogErrorObject
ouLogCriticalObject
em caso de falha, por exemplo, se o trabalho de codificação falhar. Use variantes do método Exception se aplicável.
- Use
Embora você possa registrar qualquer informação em qualquer fase, não polua os logs com elementos estranhos.
ObjectLogger
O ObjectLogger com IObjectLogger é um utilitário de wrapper pequeno para o Logger/ILogger padrão. Esse utilitário de linha única registra em log qualquer objeto C# convertendo objetos C# em objetos de dicionário que o agente pode consumir.
O ObjectLogger/IObjectLogger restringe o uso de métodos de agente que não têm EventIds
usando um padrão de adaptador, em vez de herança. Essa restrição força os desenvolvedores a usarem EventIds
, que são úteis para depuração.
Outras recomendações para usar ObjectLogger incluem:
- Não ignore o IObjectLogger usando o ILogger.
- Use o IObjectLogger com o tipo adequado para sua classe:
IObjectLogger<myClass>
. - Em qualquer bloco catch de tratamento de exceção, use os métodos IObjectLogger que incluem exceções. Provedores de log, como o Application Insights, podem usar as informações de exceção.
Esquema e dados de log
A infraestrutura de runtime da Grade de Eventos subjacente fornece um esquema base. O esquema de eventos da Grade de Eventos inclui a hora do evento, o dispositivo de origem, o nível de gravidade e a mensagem de cadeia de caracteres. As propriedades personalizadas padrão do Logger/ILogger incluem EventId
, Category
e RequestPath
.
Objetos de contexto
Para trabalhar com APIs complexas e fluxos de trabalho que exigem várias entradas e saídas, você pode criar um objeto de contexto, que é um recipiente de propriedades de variáveis importantes que o código pode passar ou gerar. Objetos de contexto podem lidar com muitos parâmetros, e as assinaturas de método não precisam ser alteradas quando você adiciona ou remove parâmetros. Você também pode passar objetos de contexto para o agente e outras interfaces como uma unidade.
Por exemplo, em vez de:
var store = new StorageBlob();
var tier = req.Query["tier"];
var result = await store.SetBlobStorageTier(blobName, tier);
logger.LogInformationObject(LogEventIds.setBlobProperties, result);
Você pode suar o seguinte código:
var storageContext = new StorageContext();
storageContext.Store = new StorageBlob();
storageContext.Tier = req.Query["tier"];
storageContext.Result = await store.SetBlobStorageTier(blobName, storageContext.Tier);
logger.LogInformationObject(LogEventIds.setBlobProperties, storageContext);
Níveis de log
Atribuir o nível de registros em log apropriado pode não ser simples. As descrições gerais a seguir dos níveis de log são de LogLevel Enum.
LogLevel | Enumeração | Descrição |
---|---|---|
LogTrace | 0 | Contém as mensagens mais detalhadas e podem conter dados confidenciais do aplicativo. Essas mensagens são desativadas por padrão e não devem ser ativadas em um ambiente de produção. |
LogDebug | 1 | Usado para investigação interativa durante o desenvolvimento. Esses logs devem conter principalmente informações úteis para depuração e não têm valor de longo prazo. |
LogInformation | 2 | Rastreia o fluxo geral do aplicativo. Esses logs devem ter valor de longo prazo. |
LogWarning | 3 | Realça um evento anormal ou inesperado no fluxo do aplicativo, mas não interrompe a execução do aplicativo. |
LogError | 4 | Registra quando o fluxo de execução atual é interrompido devido a uma falha. Esses logs devem indicar falhas na atividade atual, e não em todo o aplicativo. |
LogCritical | 5 | Descreve uma falha irrecuperável do aplicativo ou do sistema ou uma falha catastrófica que exige atenção imediata. |
LogNone | 6 | Não são usados para gravar mensagens de log. Especifica que uma categoria de log não deve gravar mensagens. |
Próximas etapas
Documentação do produto:
Módulos do Microsoft Learn: