Ned*_*rph 8 .net c# nlog hangfire
所以我的问题如下:我正在调度/使用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();
});
}
}
Run Code Online (Sandbox Code Playgroud)
我想要完成的是Hangfire可以自己进行日志记录,而我的预定作业也可以完成所有日志记录,我并不关心它在一个或多个文件中.目前,Hangfire正在正确进行日志记录,即:
2015-02-25 14:32:41.4400|TRACE|Hangfire.Server.AutomaticRetryServerComponentWrapper|Sending start request for server component 'Server Bootstrapper'...
Run Code Online (Sandbox Code Playgroud)
等等
但是,从预定的工作中进行的记录无处可见.
我想问的是:我如何从预定的方法/工作中进行记录?我的猜测是我错过了某个地方的依赖/背景,但我真的没有任何线索.
在 Hangfire 作业中运行时,NLog 可能无法找到它的配置。
解决办法是:
或者使用路径加载配置,例如
LogManager.Configuration = new XmlLoggingConfiguration("c:/dir/nlog.config");
Run Code Online (Sandbox Code Playgroud)或者在 C# 中创建配置。查看文档
var config = new LoggingConfiguration();
config.AddRuleForAllLevels(new FileTarget()
{
FileName = "c:/temp/my-logfile.log"
});
LogManager.Configuration = config; //apply config
Run Code Online (Sandbox Code Playgroud)如果这仍然是一个问题,您可以使用内部日志进行故障排除:
// set internal log level
InternalLogger.LogLevel = LogLevel.Trace;
// enable internal logging to a file
InternalLogger.LogFile = "c:\\temp\\nlog-internal.log";
Run Code Online (Sandbox Code Playgroud)
查看内部日志文档
| 归档时间: |
|
| 查看次数: |
2522 次 |
| 最近记录: |