Logback и MDC в многопоточной системе - PullRequest
0 голосов
/ 11 января 2019

У меня есть многопоточное приложение, где каждый поток оперирует различными объектами с именами, т.е.

process-1
process-2
process-3

В настоящее время шаблон выглядит так:

[%thread] - %msg %n

И я хочу добиться чего-то подобного:

[%thread] %processName - %msg %n

Где processName указано в объекте.

Моя цель состоит в том, чтобы добавить эти имена в сгенерированные журналы, чтобы я мог очень легко выполнять их поиск, когда мне нужно будет просмотреть историю. Я уже регистрирую имя потока, но этого мне недостаточно.

Я начал с MDC, однако оказалось, что он сохраняет сохраненное имя между всеми потоками. В лучшем случае это имя используется для всех журналов, в худшем случае свойство пустое.

Как мне добиться этой многопоточной регистрации с или без MDC?

1 Ответ

0 голосов
/ 11 января 2019

Я полагаю, что каждый процесс запускается в отдельном потоке таким образом, при запуске потока положить в MDC идентификатор процесса

// this method runs in different thread for each invocation.
public void startProcess(String idProcess) {
    MDC.put("processName", idProcess);
     ....

и при входе в систему измените шаблон

[%thread] %X{processName} %msg %n

метод put сохраняет идентификатор в потоке, поэтому каждый поток будет иметь различное значение

...