Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

524
Vistas
Funciones de Azure: registro de ILogger entre clases

En una función de Azure, el método de ejecución crea un ILogger que en mi clase principal puedo usar para registrar errores e información; sin embargo, estoy usando clases auxiliares para ejecutar mis consultas Graph API y Cosmos DB.

¿Cuál es la mejor manera de registrar errores e información en clases separadas? ¿Debería pasar el registro en todas mis clases o métodos? ¿O hay una mejor manera de hacer que ILogger esté disponible para todas las clases en tiempo de ejecución?

 public class AzureFunction { public Task Run([TimerTrigger("0 0 1 * * *")] TimerInfo myTimer, ILogger log) { log.LogInformation("This message logs correctly"); GraphHelper graphHelper = new GraphHelper(); graphHelper.GetGraphData(); } } public class GraphHelper { public void GetGraphData() { try { asyncTask() } catch (Exception ex) { log.LogInformation($"{ex.Message} - How can I log this without passing ILogger to every class or method?"); } } }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

La forma correcta (en mi humilde opinión) es a través de la inyección de dependencia.

 using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Text; namespace FunctionApp1 { public class HelperClass : IHelperClass { private static ILogger<IHelperClass> _logger; public HelperClass(ILogger<IHelperClass> logger) { _logger = logger; } public void Dowork() { _logger.LogInformation("Dowork: Execution Started"); /* rest of the functionality below ..... ..... */ _logger.LogInformation("Dowork: Execution Completed"); } } }

anfitrión.json

 { "version": "2.0", "logging": { "applicationInsights": { "samplingExcludedTypes": "Request", "samplingSettings": { "isEnabled": true } }, "logLevel": { "FunctionApp1.HelperClass": "Information" } } }

clase de ayudante

 using System; using System.Collections.Generic; using System.Text; namespace FunctionApp1 { public interface IHelperClass { void Dowork(); } }

Función principal

 using System; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Host; using Microsoft.Extensions.Logging; namespace FunctionApp1 { public class MainFunction // Ensure class is not static (which comes by default) { private IHelperClass _helper; public MainFunction(IHelperClass helper) { _helper = helper; } [FunctionName("MainFunction")] public void Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, ILogger log) { log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}"); // call helper _helper.Dowork(); } } }

Inicio.cs

 using Microsoft.Azure.Functions.Extensions.DependencyInjection; // install nuget - "Microsoft.Azure.Functions.Extensions" using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Text; [assembly: FunctionsStartup(typeof(FunctionApp1.Startup))] namespace FunctionApp1 { public class Startup : FunctionsStartup { public override void Configure(IFunctionsHostBuilder builder) { builder.Services.AddSingleton<IHelperClass,HelperClass>(); } } }

Puede encontrar una muestra completa en https://gist.github.com/nareshnagpal06/82c6b4df2a987087425c32adb58312c2

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda