Logback - отдельный файл журнала для каждого потока
В этом руководстве мы покажем вам, как использовать LogbackMapped Diagnostic Context (MDC)
иSiftingAppender
для создания отдельного файла журнала для каждого потока.
P.S Tested with Logback 1.1.2, should work in earlier version.
Note
Дополнительная информация, обратитесь к этомуLogback MDC documentation
1. logback.xml example
Файлlogback.xml
, чтобы показать вам, как объявить и настроитьSiftingAppender
иMDC
.
logback.xml
logFileName head0 ${USER_HOME}/${logFileName}.log %d{yyyy-MM-dd HH:mm:ss} %mdc [%thread] %level %logger{35} - %msg%n ${USER_HOME}/${logFileName}.%i.log.zip 1 10 10MB %-5level %logger{36} - %msg%n
2. Пример потоков Java
Простой пример потока, объявлено значение "logFileName" черезMDC.put
Head.java
package com.example.analyzer.core; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; public class Head implements Runnable { static Logger logger = LoggerFactory.getLogger(Head.class); private String name; @Override public void run() { MDC.put('logFileName', getName()); logger.debug("hello"); //remember remove this MDC.remove('logFileName'); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Начать 10 потоков
int count = 1; while(count<=10){ Head head = new Head(); head.setName("head-" + count); threadPools.execute(head); count++; }
Вывод: 10 отдельных файлов журнала для 10 потоков.
Note
С помощью этой функции MDC вы даже можете записывать вывод в отдельный файл журнала для каждого пользователя, вошедшего в систему, каждого запроса URI, каждого удаленного хоста и т. д.