В наших приложениях мы обычно называем потоки, которые мы создаем. Например, мы создадим поток и дадим ему имя типа "WorkerThread".
Скажем, это часть моего файла конфигурации log4net:
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="C:\Logs\MyApp\myapp.log" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="1000MB" />
<staticLogFileName value="true" />
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="FATAL" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c :: %m%n" />
</layout>
</appender>
Эта конфигурация напечатает следующее в моем журнале:
2017-03-07 17:00:00,003 [MessagePump Worker] DEBUG MyApp.App :: Blah Blah Blah
Я бы хотел, чтобы он печатал:
2017-03-07 17:00:00,003 [MessagePump Worker: 2380] DEBUG MyApp.App :: Blah Blah Blah
Я просто пытаюсь выяснить, что мне нужно, чтобы включить в свой шаблон преобразования, также включить ThreadID (2380), как в моем примере выше. Я выполнил некоторые поисковые запросы Google, но я не могу найти способ распечатать "Имя потока" и "Идентификатор потока". У кого-нибудь есть идеи?
В вашей прикладной нити используйте:
ThreadContext.Properties["threadid"] = Thread.CurrentThread.ManagedThreadId;
в схеме преобразования:
%property{threadid}
Это может быть невозможно вне ручного добавления ThreadContext.Property, как в ответе @Wouter.
Смотрите документацию здесь:
резьба | Используется для вывода имени потока, сгенерировавшего событие регистрации. Использует номер потока, если имя отсутствует.
Таким образом, вы получаете только идентификатор потока, если имя потока не существует. Я расстроен этим сам, поскольку мне нужны только теги потоков, даже если указан нить.