簡體   English   中英

使用NLog從Hangfire計划的后台作業中記錄

[英]Logging from a Hangfire scheduled background job with NLog

所以我的問題如下:我正在計划/使用Hangfire的方法/功能使用NLog記錄了大量相關信息。 在不使用hangfire的情況下運行該方法時,我會獲得我想要的所有日志記錄信息,但是當我使用hangfire調度該方法時,所有這些日志記錄都會丟失。

我知道Hangfire使用NLog(或您喜歡的其他任何日志記錄框架)來實現自己的日志記錄目的。 我正在從ASP.NET MVC4 Web應用程序使用Hangfire。 我正在使用Ninject並使用OWIN Startup類設置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'...

等等

但是,從計划的作業中記錄日志卻無處可見。

我想問的是:如何從計划的方法/作業中記錄日志? 我的猜測是我缺少某處的偽造/上下文,但我確實沒有任何線索。

在Hangfire作業中執行時,NLog可能找不到它的設定。

解決方案是:

  1. 或使用路徑加載配置,例如

     LogManager.Configuration = new XmlLoggingConfiguration("c:/dir/nlog.config"); 
  2. 或在C#中創建配置。 查看文件

     var config = new LoggingConfiguration(); config.AddRuleForAllLevels(new FileTarget() { FileName = "c:/temp/my-logfile.log" }); LogManager.Configuration = config; //apply config 

如果仍然存在問題,則可以使用內部日志進行故障排除:

// set internal log level
InternalLogger.LogLevel = LogLevel.Trace;

// enable internal logging to a file
InternalLogger.LogFile = "c:\\temp\\nlog-internal.log";

查看內部日志文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM