¿Uso de Serilog WCF sin constructores?
Soy nuevo en c# y estoy tratando de usar Serilog en una aplicación de WCF. Esta aplicación de WCF está alojada en IIS 6.0.
Necesito crear el registrador solo una vez cuando se inicializa el servicio. Sin embargo, parece que WCF no tiene constructores. ¿Cómo puedo crear el registrador a continuación solo una vez y tenerlo disponible para el resto de la aplicación? Se agradecerían ejemplos de código.
ILogger logger = new LoggerConfiguration()
.ReadAppSettings()
.CreateLogger();
Log.Logger = logger;
Pensé en usar AppInitialize en la carpeta App_Code, pero no parece que el programa active el método AppInitialize.
public class InitializeApp
{
public static void AppInitialize()
{
ILogger logger = new LoggerConfiguration()
.ReadAppSettings()
.CreateLogger();
Log.Logger = logger;
}
}
Cuando ejecuto el proyecto en Visual Studio 2019, nunca se activa AppInitialize.
davy.ai
Para crear el registrador Serilog solo una vez cuando el servicio WCF se inicializa, puedes aprovechar el ciclo de vida del servicio WCF. Específicamente, puedes usar el evento
Opening
deServiceHost
para crear el registrador antes de que el servicio se inicie. Aquí tienes un ejemplo:En este ejemplo, se crea el
ServiceHost
con una claseServiceHostFactory
personalizada que anula el métodoCreateServiceHost
. La instancia deServiceHost
se crea con una referencia al tipo de servicio (MyService
) y las direcciones base para el servicio.En el método
CreateServiceHost
, se agrega un controlador de eventos al eventoOpening
deServiceHost
. Este evento se activa cuando el host del servicio se está iniciando. En el controlador de eventos, se crea el registrador Serilog utilizando la configuración delLoggerConfiguration
desde la configuración de la aplicación y se asigna a la propiedad estáticaLog.Logger
.En la clase
MyService
, el registrador se inyecta a través del constructor, por lo que estará disponible para todos los métodos de la clase.Recuerda actualizar el archivo
web.config
con la factory correcta para el host del servicio:Espero que esto ayude. Hazme saber si tienes alguna pregunta.