Есть ли способ отключить ведение журнала, которое hangfire выполняет с помощью serilog?

Есть ли способ отключить ведение журнала, которое Hangfire выполняет с помощью serilog? Мы используем нашу собственную абстракцию, и я не хочу, чтобы весь этот лишний шум исходил от регистратора Hangfire при использовании serilog.

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

// проект, в котором настроен метод конфигурации

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
0
2 719
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете исключить все пространство имен Hangfire (при условии, что все оно находится в одном пространстве имен - я никогда не использовал его раньше), используя выражение фильтра:

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

Пожалуйста, добавьте свой код инициализации ведения журнала к вашему вопросу.

PatrickSteele 12.09.2018 13:37
Ответ принят как подходящий

Определите регистратор и поставщик журналов, который ничего не регистрирует:

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

и настройте Hangfire для использования в вашем классе Startup:

using Hangfire;

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

Чтобы разработать ответ @ PatrickSteele, вам, по-видимому, нужно использовать SourceContent из SeriLog. У Hangfire их несколько. Этот код реализует это:

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

Конечно, это конфигурация мой, которая использует SQL Server в качестве цели для ведения журнала. Может оказаться полезным собрать различные исходники из Hangfire в этом одном месте для включения в ваш собственный код (хотя это не обязательно является исчерпывающим).

Для Dot Net Core,

В appsettings.json просто добавьте «Hangfire» в «MinimumLevel => Override» и значение как «Предупреждение». Будет зарегистрировано только предупреждение и ошибка.

Если вы установите "Override", тогда будет регистрироваться только ошибка Hangfire.

enter image description here

Другие вопросы по теме