代码之家  ›  专栏  ›  技术社区  ›  asyncwait

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

  •  2
  • asyncwait  · 技术社区  · 16 年前

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

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

    JobDetail 构造函数,但看起来我错了。

    var job = new JobDetail("n1", null, typeof (MyJob));
    
    3 回复  |  直到 13 年前
        1
  •  1
  •   asyncwait    16 年前

    至少无法设置工作线程的名称。但是,我使用了log4net的%property工具在日志文件中生成有意义的线程名称

        2
  •  0
  •   Marko Lahma    16 年前

    您是否有需要线程逻辑名称的特定情况?线程是池化的,并且不能保证哪个线程得到要处理的作业类型。这就是为什么线程名通常仅用于调试目的,以跟踪特定线程生命周期中发生的事情。

        3
  •  0
  •   ms007    13 年前

    这是一个老问题的新答案,但可能对某些人有所帮助。

    我不喜欢日志文件中的长石英线程名称[DefaultQuartzScheduler\u 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以包含新属性。 我的看起来像这样:

    <conversionPattern value="%d{dd.MM.yyyy HH:mm:ss,ffff} %-5level [%property{threadId}] - %message%newline" />
    

    推荐文章