C# 使用NLog时出现Hangfire错误
因此,我试图让我的应用程序每分钟向文本文件发送一个字符串,因此在我的Global.asax.cs文件中,我有以下设置:C# 使用NLog时出现Hangfire错误,c#,asp.net-mvc,logging,nlog,hangfire,C#,Asp.net Mvc,Logging,Nlog,Hangfire,因此,我试图让我的应用程序每分钟向文本文件发送一个字符串,因此在我的Global.asax.cs文件中,我有以下设置: public class Startup { public void Configuration(IAppBuilder app) { GlobalConfiguration.Configuration .UseSqlServerStorage("AppContext"); app.UseHangfi
public class Startup
{
public void Configuration(IAppBuilder app)
{
GlobalConfiguration.Configuration
.UseSqlServerStorage("AppContext");
app.UseHangfireDashboard();
app.UseHangfireServer();
}
}
public class HeartbeatSetup
{
public static void Heartbeat()
{
var config = new NLog.Config.LoggingConfiguration();
var logFile = new NLog.Targets.FileTarget() { FileName = "heartbeat.txt", Name = "logfile" };
config.LoggingRules.Add(new NLog.Config.LoggingRule("*", LogLevel.Trace, logFile));
NLog.LogManager.Configuration = config;
var logger = NLog.LogManager.GetCurrentClassLogger();
var currentTime = DateTime.Now.ToString();
RecurringJob.AddOrUpdate("heartbeat", () => logger.Trace("Test"), Cron.Minutely);
}
}
因此,这将创建作业并每分钟运行一次,但作业未完成并引发以下错误:
没有为此对象定义无参数构造函数
有人对此有解决方案或替代方法吗?因此我通过引用下面创建的另一个静态方法修复了此问题:
public class HeartbeatSetup
{
public static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
public static void Heartbeat()
{
try
{
RecurringJob.AddOrUpdate("heartbeat", () => Fire(), Cron.Minutely);
}
catch (Exception ex)
{
logger.Fatal(ex, "error");
throw;
}
}
public static void Fire()
{
var config = new NLog.Config.LoggingConfiguration();
var logFile = new NLog.Targets.FileTarget("logfile") { FileName = "heartbeat.txt" };
config.AddRule(NLog.LogLevel.Info, NLog.LogLevel.Fatal, logFile);
NLog.LogManager.Configuration = config;
var currentTime = DateTime.Now.ToString();
try
{
logger.Info(currentTime + " - beep");
}
catch (Exception ex)
{
logger.Fatal(ex + " - beeeeeeeeeeeeeeeeeeeeeeeeeeeeeep");
}
}
}
另一种选择是使用合适的酒吧间,而不是壁炉。但是,如果Hangfire是您的唯一选项,那么您可以尝试将调用的内容包装为创建并配置logger作为公共静态方法,而无需任何参数。还可以看看Hangfire如何在SqlServer表中存储注册的委托。这可能会为您提供关于什么是可运行的Hangfire呼叫目标的线索