Как установить имя рабочего потока Quartz.net? - PullRequest
2 голосов
/ 15 декабря 2009

Как мне установить имя рабочего потока в Quartz.net?

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

Я хотел увидеть какую-то значимую информацию в журналах. Я пытался использовать конструктор JobDetail, но, похоже, я не прав.

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

Ответы [ 3 ]

1 голос
/ 19 декабря 2009

По крайней мере, нет способа установить имя рабочего потока. Однако я использовал% свойство объекта log4net для получения значимого имени потока в файлах журнала

0 голосов
/ 14 июня 2013

Это новый ответ на старый вопрос, но, возможно, он кому-нибудь пригодится.

Мне не понравилось длинное имя кварцевой нити [DefaultQuartzScheduler_Worker-1] в моих файлах журнала.

Вместо этого я хотел, чтобы log4net показывал идентификатор потока. Для этого вам нужно установить свойство, которое регистрирует идентификатор текущего потока.

Я нашел этот класс. источник
Это лямбда / функциональный способ записи вычисленного контекста: объяснение контекста log4net

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" />

Вот и все. Таким образом, идентификатор каждого потока будет определен во время выполнения и зарегистрирован в своем собственном свойстве.

0 голосов
/ 17 декабря 2009

Обычно вас интересует, какие задания выводятся (у них должны быть свои собственные регистраторы), а не интересует поток.

У вас есть конкретный случай, когда вам нужны логические имена для потоков? Потоки объединяются, и нет никаких гарантий относительно того, какой поток получает какую работу обрабатывать. Вот почему имя потока обычно используется только в целях отладки для отслеживания событий, произошедших в жизненном цикле конкретного потока.

...