如何设置Quartz.net工作线程名称?

时间:2009-12-15 15:32:40

标签: c# .net log4net scheduling quartz.net

如何在Quartz.net中设置工作线程的名称?

[2009-12-15 08:56:25] [DefaultQuartzScheduler_Worker-1] INFO

我想在日志中看到一些有意义的信息。我尝试使用JobDetail构造函数,但看起来我错了。

var job = new JobDetail("n1", null, typeof (MyJob));

3 个答案:

答案 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将在运行时确定并记录在它自己的属性中。