Ответ 1
В заключение: LoggerFactory.getLogger(Class<?>)
"кэширует" Logger
экземпляры на основе класса. Поэтому, если я дважды вызываю LoggerFactory.getLogger(Dog.class)
, я получу 2 ссылки на один и тот же объект в памяти. Это означает, что если 2+ потоки создают экземпляр Dog
, они оба получат одинаковый (общий) экземпляр Dog Logger
.
Таким образом, API SLF4J не является потокобезопасным. Все зависит от выбранного вами связывания. Похоже, что общие привязки (log4j, JUL и logback) являются потокобезопасными, поэтому даже если несколько потоков получают доступ к одной и той же Dog Logger
, привязка журнала log4j/JUL/logback является потокобезопасной, поэтому у вас нет вопросы.
Пример: если вы создаете собственную привязку SLF4J, сделайте все свои методы Logger
impl synchronized
или поправьте безопасность потоков по-другому (предоставляя ThreadLocal
и т.д.).