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

4

8

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 = "[email protected]",
                        MailServer = "smtp.gmail.com",
                        ToEmail = "[email protected]",
                        NetworkCredentials = new NetworkCredential("[email protected]", "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();
            }
 }
}
Showroom answered 10/9, 2018 at 5:19 Comment(0)
T
11

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...        
    }
}
Tmesis answered 19/9, 2018 at 7:19 Comment(0)
S
7

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.

enter image description here

Suboxide answered 17/3, 2021 at 11:47 Comment(0)
B
2

You could exclude the entire Hangfire namespace (assuming it's all under one namespace -- I've never used it before) using a Filter expression:

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

Boabdil answered 11/9, 2018 at 12:6 Comment(1)
Please add your logging initialization code to your question.Boabdil
G
2

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).

Gardant answered 30/11, 2019 at 12:14 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.