¿Hay alguna manera de desactivar el registro que Hangfire hace con serilog? Estamos utilizando nuestra propia abstracción y no quiero que todo este ruido extra provenga del registrador Hangfire mientras utilizo el serilog.

// INIT call under web project 
namespace MYApp.Web.App_Start
{
    public static class Bootstrapper
    {
        public static void Run()
        {
            Core.Logging.Serilog.SetConfiguration();
        }
    }
}

// proyecto donde se configura el método de configuración

namespace MYApp.Core.Logging
{
 public static class Serilog
    {
      public static void SetConfiguration()
            {

                Log.Logger = new LoggerConfiguration()
                    //.WriteTo.File(@"c:\log-.txt", rollingInterval: RollingInterval.Minute, shared: true)
                    .WriteTo.Email(new EmailConnectionInfo()
                    {
                        FromEmail = "xxxxxx@gmail.com",
                        MailServer = "smtp.gmail.com",
                        ToEmail = "xxxx@xxxx.xx.xx",
                        NetworkCredentials = new NetworkCredential("xxxx@gmail.com", "xxxxxxxxx"),
                        Port = 587,
                        EnableSsl = true,
                        EmailSubject = "YYYYYY: Error Log"
                    }, outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {NewLine} {Message:lj}{NewLine}{Exception}")
                    .Filter.ByExcluding(Matching.FromSource("Hangfire"))
                    .CreateLogger();
            }
 }
}
6
Kaushik Thanki 10 sep. 2018 a las 08:19

3 respuestas

La mejor respuesta

Defina un registrador y un proveedor de registro que no registre nada:

using Hangfire;
using Hangfire.Logging;

public class NoLoggingProvider : ILogProvider {
    public ILog GetLogger(string name) {
        return new NoLoggingLogger();
    }
}

public class NoLoggingLogger : ILog {
    public bool Log(LogLevel logLevel, Func<string> messageFunc, Exception exception = null) {
        return false;
    }
}

Y configure Hangfire para usarlo en su clase Startup:

using Hangfire;

public class Startup {
    public void Configuration(IAppBuilder app) {
        GlobalConfiguration.Configuration.UseLogProvider(new NoLoggingProvider());
        // the rest of your configuration...        
    }
}
4
Richard 19 sep. 2018 a las 10:55

Para desarrollar la respuesta de @ PatrickSteele, aparentemente necesitas usar el contenido de origen de SeriLog. Hangfire tiene varios de estos. Este código implementa esto:

        Log.Logger = new LoggerConfiguration()
            .ReadFrom.Configuration(Configuration)
            .Filter.ByExcluding(Matching.FromSource("Hangfire.SqlServer.ExpirationManager"))
            .Filter.ByExcluding(Matching.FromSource("Hangfire.SqlServer.SqlServerObjectsInstaller"))
            .Filter.ByExcluding(Matching.FromSource("Hangfire.Server.BackgroundServerProcess"))
            .Filter.ByExcluding(Matching.FromSource("Hangfire.Server.ServerWatchdog"))
            .Filter.ByExcluding(Matching.FromSource("Hangfire.Server.ServerHeartbeatProcess"))
            .Filter.ByExcluding(Matching.FromSource("Hangfire.Processing.BackgroundExecution"))
            .Filter.ByExcluding(Matching.FromSource("Hangfire.SqlServer.CountersAggregator"))
            .Filter.ByExcluding(Matching.FromSource("Hangfire.BackgroundJobServer"))
            .CreateLogger();

Por supuesto, esta es la configuración my , que utiliza SQL Server como destino para el registro. Puede resultar útil recopilar las diversas fuentes de Hangfire en este único lugar para incluirlas en su propio código (aunque esto no es necesariamente exhaustivo).

1
Program.X 2 dic. 2019 a las 16:25

Puede excluir todo el espacio de nombres de Hangfire (suponiendo que todo esté bajo un espacio de nombres, nunca lo he usado antes) usando una expresión de filtro:

.Filter.ByExcluding(Matching.FromSource("Hangfire"))

1
PatrickSteele 11 sep. 2018 a las 12:06