Как я могу исправить ошибку конфигурации Hangfire?

Кажется, мне нужно настроить ведение журнала. Я могу добавлять задания и видеть их на странице /hangfire, но они не будут срабатывать, если я отключу app.UseHangfireServer().

Поскольку это простой веб-сайт на основе папок, я скопировал необходимые библиотеки DLL в папку bin из запущенного примера проекта Hangfire MVC. Как я могу настроить регистратор, если он требуется?

Error location:

Line 17:         {
Line 18:             app.UseHangfireServer();
Line 19:             app.UseHangfireDashboard();
Line 20: 

Source File: f:\hangfire\App_Code\Startup.cs    Line: 18 

Трассировки стека:

[ConfigurationErrorsException: The configuration section for Logging cannot be found in the configuration source.]
   Microsoft.Practices.EnterpriseLibrary.Logging.LogWriterStructureHolderCustomFactory.ValidateLoggingSettings(LoggingSettings loggingSettings) +64
   Microsoft.Practices.EnterpriseLibrary.Logging.LogWriterStructureHolderCustomFactory.CreateObject(IBuilderContext context, String name, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache) +49
   Microsoft.Practices.EnterpriseLibrary.Logging.LogWriterCustomFactory.CreateObject(IBuilderContext context, String name, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache) +66
   Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.ConfiguredObjectStrategy.BuildUp(IBuilderContext context, Type t, Object existing, String id) +83
   Microsoft.Practices.ObjectBuilder.BuilderStrategy.BuildUp(IBuilderContext context, Type typeToBuild, Object existing, String idToBuild) +59
   Microsoft.Practices.ObjectBuilder.SingletonStrategy.BuildUp(IBuilderContext context, Type typeToBuild, Object existing, String idToBuild) +169
   Microsoft.Practices.ObjectBuilder.BuilderStrategy.BuildUp(IBuilderContext context, Type typeToBuild, Object existing, String idToBuild) +59
   Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.ConfigurationNameMappingStrategy.BuildUp(IBuilderContext context, Type t, Object existing, String id) +102
   Microsoft.Practices.ObjectBuilder.BuilderBase`1.DoBuildUp(IReadWriteLocator locator, Type typeToBuild, String idToBuild, Object existing, PolicyList[] transientPolicies) +217
   Microsoft.Practices.ObjectBuilder.BuilderBase`1.BuildUp(IReadWriteLocator locator, Type typeToBuild, String idToBuild, Object existing, PolicyList[] transientPolicies) +127
   Microsoft.Practices.ObjectBuilder.BuilderBase`1.BuildUp(IReadWriteLocator locator, String idToBuild, Object existing, PolicyList[] transientPolicies) +87
   Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.EnterpriseLibraryFactory.BuildUp(IReadWriteLocator locator, IConfigurationSource configurationSource) +135
   Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.EnterpriseLibraryFactory.BuildUp(IConfigurationSource configurationSource) +53
   Microsoft.Practices.EnterpriseLibrary.Logging.LogWriterFactory.Create() +29
   Microsoft.Practices.EnterpriseLibrary.Logging.Logger.get_Writer() +106
   lambda_method(Closure , String , TraceEventType ) +252
   Hangfire.Logging.LogProviders.EntLibLogger.Log(LogLevel logLevel, Func`1 messageFunc, Exception exception) +60
   Hangfire.Logging.LoggerExecutionWrapper.Log(LogLevel logLevel, Func`1 messageFunc, Exception exception) +87
   Hangfire.Logging.LogExtensions.IsInfoEnabled(ILog logger) +42
   Hangfire.Logging.LogExtensions.Info(ILog logger, String message) +27
   Hangfire.BackgroundJobServer..ctor(BackgroundJobServerOptions options, JobStorage storage, IEnumerable`1 additionalProcesses) +236
   Hangfire.AppBuilderExtensions.UseHangfireServer(IAppBuilder builder, JobStorage storage, BackgroundJobServerOptions options, IBackgroundProcess[] additionalProcesses) +90
   Hangfire.AppBuilderExtensions.UseHangfireServer(IAppBuilder builder, BackgroundJobServerOptions options, JobStorage storage) +42
   Hangfire.AppBuilderExtensions.UseHangfireServer(IAppBuilder builder, BackgroundJobServerOptions options) +35
   Hangfire.AppBuilderExtensions.UseHangfireServer(IAppBuilder builder) +46
   MyWebApplication.Startup.Configuration(IAppBuilder app) in f:\hangfire\App_Code\Startup.cs:18

person Nime Cloud    schedule 08.12.2015    source источник


Ответы (4)


Я лично использую Elmah (который Hangfire автоматически определяет в более новых версиях).

Но если вы хотите отключить его, установка для поставщика журнала значения null должна помочь (вы должны поместить это в метод Start-up вашего приложения, который будет отличаться в зависимости от того, какой механизм вы используете для выполнения запускать)

LogProvider.SetCurrentLogProvider(null);

Источник: https://discuss.hangfire.io/t/turn-off-logging /1150

person MutantNinjaCodeMonkey    schedule 08.12.2015
comment
Это не помогло. Код выполнен, и я получил ту же ошибку конфигурации, не найденную. - person Nime Cloud; 09.12.2015
comment
Какую версию Hangfire вы используете и как выглядит ваш код инициализации? Я только что попытался воссоздать вашу проблему в совершенно новом проекте (только что установил Hangfire, запустил фоновый сервер, ничего в конфигурации для ведения журнала), и он работает без каких-либо исключений. - person MutantNinjaCodeMonkey; 09.12.2015

Используете ли вы какую-либо библиотеку регистратора для вашего решения? Как говорится в документации Hangfire:

Начиная с Hangfire 1.3.0, от вас ничего не требуется, если ваше приложение через рефлексию уже использует одну из следующих библиотек (чтобы сам Hangfire не зависел ни от одной из них). Реализация ведения журнала выбирается автоматически путем проверки наличия соответствующих типов в порядке, показанном ниже.

Serilog NLog Log4Net EntLib Logging Loupe Elmah Если вы хотите регистрировать события Hangfire и у вас не установлена ​​библиотека протоколирования, выберите один из вышеперечисленных и обратитесь к его документации.

Насколько я понимаю, вам нужна какая-то из библиотек ведения журнала, перечисленных выше.

person Pawel    schedule 08.12.2015

У меня есть две точки запуска:

[assembly: OwinStartup(typeof(MyWebApplication.Startup))]

а также

[ApplicationStartup]

Удаление [ApplicationStartup] и перемещение кода, связанного с Hangfire, в другое место устранило проблему.

person Nime Cloud    schedule 13.12.2015

Вы должны добавить поставщика журнала. В качестве примера вы можете добавить поставщика сборки следующим образом:

LogProvider.SetCurrentLogProvider(new ColoredConsoleLogProvider());

и это должно устранить ошибку.

person peeyush rahariya    schedule 09.08.2017