Reemplazo de TraceFilter en Azure.WebJobs 3.0+
Estoy actualizando de Microsoft.Azure.WebJobs 2.0.0 a 3.0.30. En nuestro código existente, tenemos código personalizado que utiliza el TraceFilter
del SDK anterior, que ya no está presente.
¿Hay alguna manera de migrar el siguiente código que depende de JobHostConfiguration
y TraceFilter
al nuevo SDK?
En Program.Main():
// config era un JobHostConfiguration, que no está presente en el nuevo SDK
config.Tracing.Tracers.Add(new TraceMonitor()
.Filter(e => (e.Exception is FunctionInvocationException fie ? fie.InnerException : e.Exception)?.IsMonitored() ?? false, "Manejador de excepciones")
.Subscribe(Process));
public void Process(TraceFilter filter)
{
var events = filter.GetEvents().Where(e => e.Exception != null);
foreach (var traceEvent in events) {
...
}
}
davy.ai
Sí, hay una manera de adaptar el código que depende de
JobHostConfiguration
yTraceFilter
al nuevo SDK. En el nuevo SDK,TraceFilter
ha sido reemplazado porILoggerFactory
.Para modificar el código existente para que funcione con el nuevo SDK, puedes hacer lo siguiente:
Microsoft.Extensions.Logging.ILoggerProvider
. Esto se hace creando una clase e implementando el métodoCreateLogger
para devolver una nueva instancia deILogger
:Microsoft.Extensions.Logging.ILogger
. Esto se hace creando una clase e implementando los diferentes métodos de registro comoLogDebug
,LogInformation
, etc.Program.Main
, crea una nueva instancia deILoggerFactory
y agrega tuMyLoggerProvider
a él. Luego, úsalo para crear un objetoJobHostConfiguration
y pásalo al constructor deJobHost
:Process
para aceptar una instancia deILogger
:config
, registra una instancia de tuILogger
en la colección deservices
:Con estas modificaciones, tu código existente debería funcionar con el nuevo SDK. Ten en cuenta que es posible que debas modificar el método
Process
para que funcione con la nueva interfazILogger
en lugar de la antigua interfazTraceFilter
.</tstate,>