Есть ли способ отключить ведение журнала, которое 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 = "[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();
}
}
}
Вы можете исключить все пространство имен Hangfire (при условии, что все оно находится в одном пространстве имен - я никогда не использовал его раньше), используя выражение фильтра:
.Filter.ByExcluding(Matching.FromSource("Hangfire"))
Определите регистратор и поставщик журналов, который ничего не регистрирует:
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 в этом одном месте для включения в ваш собственный код (хотя это не обязательно является исчерпывающим).
Пожалуйста, добавьте свой код инициализации ведения журнала к вашему вопросу.