有没有办法关闭Hangfire对serilog的记录?我们正在使用自己的抽象,我不希望在使用serilog时来自Hangfire记录器的所有这些额外噪音。
// 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();
}
}
}
答案 0 :(得分:1)
定义不记录任何内容的记录器和日志提供程序:
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...
}
}
答案 1 :(得分:1)
要开发@PatrickSteele的答案,您似乎需要使用SeriLog的SourceContent。 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();
当然,这是 my 配置,它使用SQL Server作为记录目标。在这个地方收集来自Hangfire的各种资源可能会很有用,以将其包含在您自己的代码中(尽管这不一定是详尽的)。
答案 2 :(得分:1)
对于点网核心,
在 appsettings.json 中,只需在“MinimumLevel => Override”下添加“Hangfire”并将值设置为“Warning”。这只会记录警告和错误。
如果您设置为“覆盖”,那么它只会记录来自 hangfire 的错误。
答案 3 :(得分:0)
您可以使用Filter表达式排除整个Hangfire命名空间(假设它们都在一个命名空间下-我以前从未使用过):
.Filter.ByExcluding(Matching.FromSource("Hangfire"))