Intégration du cadre journal dans les fonctions Azure avec Azure Cosmos DB / blogs / perficient

La journalisation est une partie essentielle du développement des applications, en particulier dans les environnements cloud où la surveillance et le débogage sont cruciaux. Dans les fonctions Azure, il n’y a pas de disposition intégrée pour enregistrer les détails au niveau de l’application dans une base de données centralisée, ce qui rend difficile de vérifier les journaux à chaque fois dans le portail Azure. Ce blog se concentre sur l’intégration Nlog dans les fonctions Azure pour stocker tous les journaux dans une seule base de données (Cosmos DB)assurer une approche de journalisation unifiée pour une meilleure surveillance et débogage.
1. Créer un projet de fonction azure
Commencez par créer un projet de fonction Azure en utilisant le Modèle de fonction azure dans Visual Studio.
2. Installez les packages NuGet requis
Pour permettre l’exploitation forestière en utilisant NlogInstallez les packages NuGet suivants:
Nlog d’installation
Install-Package nlog.extensions.logging
Installer-pack Microsoft.azure.cosmos
3. Créer et configurer nlog.config
NLOG utilise un fichier de configuration basé sur XML pour définir des cibles et des règles de journalisation. Créez un nouveau fichier nommé nlog.config dans la racine du projet et configurez-le avec les paramètres nécessaires.
Reportez-vous à la documentation officielle du NLOG pour la configuration cible de la base de données: Cible de la base de données NLOG
Important: Définir la copie sur le répertoire de sortie sur Copier toujours dans les propriétés du fichier pour assurer le déploiement.
4. Créer une base de données de journaux
Créez un compte Azure Cosmos DB avec l’API SQL.
Exemple de base de données et de conteneur Cosmos DB
- Nom de la base de données: LogDemodb
- Nom du conteneur: Bûches
- Clé de partition: /Application
Dans le fichier local.settings.json, définissez la chaîne de connexion COSMOS DB.
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "CosmosDBConnectionString": "AccountEndpoint=https://your-cosmosdb.documents.azure.com:443/;AccountKey=your-account-key;" } }
6. Configurer le nlog dans startup.cs
Modifier startup.cs pour configurer Nlog et les chaînes de connexion de la base de données instanciées et les variables de journal.
using Microsoft.Azure.Functions.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using NLog.Extensions.Logging; using Microsoft.Azure.Cosmos; [assembly: FunctionsStartup(typeof(MyFunctionApp.Startup))] namespace MyFunctionApp { public class Startup : FunctionsStartup { public override void Configure(IFunctionsHostBuilder builder) { builder.Services.AddLogging(loggingBuilder => { loggingBuilder.ClearProviders(); loggingBuilder.SetMinimumLevel(LogLevel.Information); loggingBuilder.AddNLog(); }); builder.Services.AddSingleton(new CosmosClient( Environment.GetEnvironmentVariable("CosmosDBConnectionString"))); } } }
7. Ajouter des journaux dans les endroits nécessaires
Pour assurer une journalisation efficace, ajoutez des journaux en fonction de la hiérarchie de niveau de journal suivante:
Exemple de connexion dans le code de fonction:
using System; using System.Threading.Tasks; using Microsoft.Azure.Cosmos; using Microsoft.Azure.WebJobs; using Microsoft.Extensions.Logging; public class MyFunction { private readonly ILogger<MyFunction> _logger; private readonly CosmosClient _cosmosClient; private readonly Container _container; public MyFunction(ILogger<MyFunction> logger, CosmosClient cosmosClient) { _logger = logger; _cosmosClient = cosmosClient; // Initialize Cosmos DB container _container = _cosmosClient.GetContainer("YourDatabaseName", "YourContainerName"); } [FunctionName("MyFunction")] public async Task Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer) { var logEntry = new { id = Guid.NewGuid().ToString(), timestamp = DateTime.UtcNow, logLevel = "Information", message = "Function executed at " + DateTime.UtcNow }; // Insert log into Cosmos DB await _container.CreateItemAsync(logEntry, new PartitionKey(logEntry.id)); _logger.LogInformation("Function executed at {time}", DateTime.UtcNow); } }
8. Déploiement
Une fois la fonction prête, déployez-la à Application de fonction azure en utilisant Visual Studio ou Azure DevOps.
Considérations de déploiement:
- Définir nécessaire Variables d’environnement dans Paramètres de configuration de la fonction azure.
- Assurer Service d’application de fonction azure et Base de données SQL sont dans le même réseau pour éviter les problèmes de connexion.
- Surveiller les journaux en utilisant Aperçu de l’application pour des diagnostics supplémentaires.
En suivant ces étapes, vous pouvez intégrer avec succès Nlog dans votre Fonctions Azure pour une journalisation efficace. Cette configuration permet une surveillance en temps réel, un stockage de journaux structuré et des capacités de débogage améliorées.
Source link