简体   繁体   中英

Is there a way to turn off logging that Hangfire does with serilog?

Is there a way to turn off logging that Hangfire does with serilog? We are using our own abstraction and I don't want all this extra noise coming from the Hangfire logger while using serilog.

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

// project where config method is setup

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();
            }
 }
}

Define a logger and log provider that does not log anything:

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;
    }
}

and configure Hangfire to use it in your Startup class:

using Hangfire;

public class Startup {
    public void Configuration(IAppBuilder app) {
        GlobalConfiguration.Configuration.UseLogProvider(new NoLoggingProvider());
        // the rest of your configuration...        
    }
}

To develop @PatrickSteele's answer, you seemingly need to use the SourceContent of SeriLog. Hangfire has a number of these. This code implements this:

        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();

Of course, this is my configuration, which uses SQL Server as a target for logging. It may prove to be useful to collect the various sources from Hangfire in this one place for inclusion in your own code (though this is not necessarily exhaustive).

您可以使用过滤器表达式排除整个 Hangfire 命名空间(假设它都在一个命名空间下——我以前从未使用过它):

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

For Dot Net Core,

In appsettings.json, just add "Hangfire" under "MinimumLevel => Override" and value as " Warning ". This will only log Warning and Error.

If you set as "Override" then it will only log error from hangfire.

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM