C# 使用NLog从Hangfire计划的后台作业进行日志记录

C# 使用NLog从Hangfire计划的后台作业进行日志记录,c#,.net,nlog,hangfire,C#,.net,Nlog,Hangfire,因此,我的问题如下:我计划使用Hangfire的方法/函数使用NLog执行大量相关信息的日志记录。当在没有hangfire的情况下运行该方法时,我得到了我想要的所有日志信息,但是当我使用hangfire调度该方法时,所有这些日志记录都丢失了 我知道Hangfire使用NLog(或您喜欢的任何其他日志框架)进行自己的日志记录。我正在使用ASP.NET MVC4 Web应用程序中的Hangfire。我正在使用Ninject并使用OWIN启动类设置hangfire,该类当前看起来如下: public

因此,我的问题如下:我计划使用Hangfire的方法/函数使用NLog执行大量相关信息的日志记录。当在没有hangfire的情况下运行该方法时,我得到了我想要的所有日志信息,但是当我使用hangfire调度该方法时,所有这些日志记录都丢失了

我知道Hangfire使用NLog(或您喜欢的任何其他日志框架)进行自己的日志记录。我正在使用ASP.NET MVC4 Web应用程序中的Hangfire。我正在使用Ninject并使用OWIN启动类设置hangfire,该类当前看起来如下:

public class Startup
{
  public void Configuration(IAppBuilder app)
  {
    app.UseHangfire(config =>
    {
        var kernel = new StandardKernel(new MyModule());
        config.UseNinjectActivator(kernel);
        config.UseSqlServerStorage("Context");
        LogProvider.SetCurrentLogProvider(new NLogLogProvider());
        config.UseServer();
    });
   }
}
我想做的是,Hangfire可以自己做日志记录,而我的计划工作也可以完成所有日志记录,我不关心它是否在一个或多个文件中。目前,Hangfire正在正确记录日志,即:

2015-02-25 14:32:41.4400|TRACE|Hangfire.Server.AutomaticRetryServerComponentWrapper|Sending start request for server component 'Server Bootstrapper'...
等等

但是,计划作业的日志记录却不见踪影


我想问的是:如何从计划的方法/作业进行日志记录?我的猜测是,我遗漏了某个地方的依赖性/上下文,但我真的没有atm的线索。

可能NLog在运行Hangfire作业时找不到它的配置

解决办法是:

  • 或者使用路径加载配置,例如

    LogManager.Configuration=新的XmlLoggingConfiguration(“c:/dir/nlog.config”);
    
  • 或者在C#中创建配置。看

    var config=new LoggingConfiguration();
    config.addRuleForAllLevel(新文件目标()
    {
    FileName=“c:/temp/my logfile.log”
    });
    LogManager.Configuration=config//应用配置
    
  • 如果这仍然是一个问题,您可以使用内部日志对其进行故障排除:

    //设置内部日志级别
    InternalLogger.LogLevel=LogLevel.Trace;
    //启用文件的内部日志记录
    InternalLogger.LogFile=“c:\\temp\\nlog internal.log”;
    

    请参见

    您是否能够识别问题?@Nediarph如果NLog配置文件中没有任何筛选器,则它应该可以为您完成这项工作。您不需要为Hangfire设置当前的日志提供程序,因为我相信它会根据您的web.config设置自动读取相同的日志。此外,在hangfire操作期间执行日志行时会发生什么情况?