[英]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可能找不到它的設定。
解決方案是:
或使用路徑加載配置,例如
LogManager.Configuration = new XmlLoggingConfiguration("c:/dir/nlog.config");
或在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.