Podsumowując:. LoggerFactory.getLogger(Class<?>)
„bufory” Logger
instancji w oparciu o klasy. Więc jeśli dwukrotnie zadzwonię pod numer LoggerFactory.getLogger(Dog.class)
, otrzymam 2 odniesienia do tego samego obiektu w pamięci. Oznacza to, że jeśli 2+ wątki utworzą instancję Dog
, otrzymają one tę samą (udostępnioną) instancję Dog Logger
.
Interfejs API SLF4J to , a nie wątek bezpieczny. Wszystko zależy od wybranego wiązania. Wygląda na to, że wspólne powiązania (log4j, JUL i logback) są bezpieczne dla wątków, więc nawet jeśli wiele wątków uzyskuje dostęp do tego samego obiektu Logger
, powiązanie dziennika log4j/JUL/logback jest wątkowo bezpieczne, więc nie masz żadnych problemów.
Sprawa w punkcie: jeśli robisz swoją slf4j wiążące, zrobić wszystkie Logger
metody IMPL synchronized
lub adres wątku bezpieczeństwa w inny sposób (o ile ThreadLocal
, itd.).
Obawiam się, że uzasadnienie tej odpowiedzi jest błędne. Fakt, że można uzyskać dwa odniesienia do tego samego "Logger" w różnych wątkach, nie sprawia, że SLF4J nie jest bezpieczny dla wątków. Wszystko, co możemy powiedzieć, to to, że bezpieczeństwo gwintów SLF4J * zależy od * bezpieczeństwa gwintu wykonania za fasadą. –
Szkoda, że OP zaznaczył to, swoją własną odpowiedź, jako poprawną odpowiedź, gdy a) rozumowanie jest błędne (nawet jeśli wniosek jest właściwy), oraz b) Stephen C przedstawił poprawną i lepiej sformułowaną odpowiedź dzień wcześniej. – davidbak