使用 NLog 时 Hangfire 出错
Error with Hangfire when using NLog
所以我试图让我的应用程序每分钟向文本文件发送一个字符串,所以在我的 Global.asax.cs 文件中我有这样的设置:
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);
}
}
因此创建作业正常并每分钟运行一次,但作业未完成并抛出以下错误:
No parameterless constructor defined for this object
有人对此有解决方案或替代方法吗?
所以我通过引用下面创建的另一个静态方法解决了这个问题:
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");
}
}
}
所以我试图让我的应用程序每分钟向文本文件发送一个字符串,所以在我的 Global.asax.cs 文件中我有这样的设置:
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);
}
}
因此创建作业正常并每分钟运行一次,但作业未完成并抛出以下错误:
No parameterless constructor defined for this object
有人对此有解决方案或替代方法吗?
所以我通过引用下面创建的另一个静态方法解决了这个问题:
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");
}
}
}