如何在Quartz.net中设置工作线程的名称?
[2009-12-15 08:56:25] [DefaultQuartzScheduler_Worker-1] INFO
我想在日志中看到一些有意义的信息。我尝试使用JobDetail
构造函数,但看起来我错了。
var job = new JobDetail("n1", null, typeof (MyJob));
答案 0 :(得分:1)
Atleast无法设置工作线程的名称。但是,我使用log4net的%property facility在日志文件中生成有意义的线程名称
答案 1 :(得分:0)
通常你会对输出的工作感兴趣(他们应该拥有自己的记录器)并且对线程不感兴趣。
您是否有需要线程逻辑名称的特定情况?线程被合并,并且无法保证哪个线程可以处理哪种工作。这就是为什么线程名称通常仅用于调试目的,以跟踪特定线程生命周期中发生的事情。
答案 2 :(得分:0)
这是旧问题的新答案,但也许对某人有帮助。
我不喜欢我的日志文件中的长石英线程名称[DefaultQuartzScheduler_Worker-1]。
相反,我希望log4net显示线程ID。因此,您需要设置一个记录当前线程ID的属性。
我找到了这门课。 source
这是记录计算上下文的lambda / func方式:log4net context explained
public class Log4NetContextProperty : IFixingRequired
{
private readonly Func<string> _getValue;
public Log4NetContextProperty(Func<string> getValue)
{
_getValue = getValue;
}
public override string ToString()
{
return _getValue();
}
public object GetFixedObject()
{
return ToString();
}
}
你必须在申请开始时以这种方式打电话。
log4net.GlobalContext.Properties["threadId"] = new Log4NetContextProperty(() => Thread.CurrentThread.ManagedThreadId.ToString());
然后在您的log4net配置中调整转换模式以包含新属性。 我看起来像这样:
<conversionPattern value="%d{dd.MM.yyyy HH:mm:ss,ffff} %-5level [%property{threadId}] - %message%newline" />
就是这样。这样,每个线程的id将在运行时确定并记录在它自己的属性中。