Log4Net печатает «ThreadID» и «Thread Name» в журнале

2

В наших приложениях мы обычно называем потоки, которые мы создаем. Например, мы создадим поток и дадим ему имя типа "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, но я не могу найти способ распечатать "Имя потока" и "Идентификатор потока". У кого-нибудь есть идеи?

  • 0
    Рассмотрим NLog
  • 0
    Может быть, вы могли бы создать собственную оболочку логгера и добавить ThreadID вручную? Взгляните на эту ссылку: logging.apache.org/log4net/release/example-apps.html Здесь обсуждается, как вы расширяете log4net с помощью пользовательского EventID (раньше я его использовал). Я думаю, что вы можете использовать этот метод, чтобы добавить ThreadID вместо EventID.
Показать ещё 3 комментария
Теги:
log4net

2 ответа

3

В вашей прикладной нити используйте:

ThreadContext.Properties["threadid"] = Thread.CurrentThread.ManagedThreadId;

в схеме преобразования:

%property{threadid}
2

Это может быть невозможно вне ручного добавления ThreadContext.Property, как в ответе @Wouter.

Смотрите документацию здесь:

Класс PatternLayout

резьба | Используется для вывода имени потока, сгенерировавшего событие регистрации. Использует номер потока, если имя отсутствует.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню