使用 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");
        }

    }
}