Ошибка с Hangfire при использовании NLog - PullRequest
0 голосов
/ 31 мая 2018

Итак, я пытаюсь, чтобы мое приложение отправляло строку в текстовый файл каждую минуту, поэтому в моем файле 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);
    }
}

Итак, создайте заданиеОК и выполняется каждую минуту, но задание не завершается и выдает следующую ошибку:

Для этого объекта не определен конструктор без параметров

У кого-нибудь есть решение этой проблемы?или альтернативный способ сделать это?

1 Ответ

0 голосов
/ 31 мая 2018

Итак, я исправил это, сославшись на другой статический метод, созданный ниже:

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

    }
}
...