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