Ви, безумовно, можете витратити багато часу на надмірну розробку цієї проблеми.
Для мов з канонічними реалізаціями журналів просто інстанціюйте канонічний реєстратор безпосередньо в кожному класі.
Для мов, що не мають канонічної реалізації, спробуйте знайти рамку фасаду журналу та дотримуватися його. slf4j - хороший вибір на Java.
Особисто я вважаю за краще дотримуватися єдиної конкретної реалізації журналу і надсилати все в syslog. Всі хороші інструменти аналізу журналів здатні поєднувати журнали систематизації з декількох серверів додатків у всебічний звіт.
Коли підпис функції включає в себе одну або дві служби залежності, а також деякі "реальні" аргументи, я розміщую залежність останнім:
int calculateFooBarSum(int foo, int bar, IntegerSummationService svc)
Оскільки в моїх системах є лише п’ять або менше таких служб, я завжди переконуюсь, що послуги включаються в одному порядку в усіх підписах функцій. Алфавітний порядок такий же хороший, як і будь-який. (Окрім того: підтримка цього методологічного підходу до роботи з мютексами також зменшить ваші шанси на розвиток тупиків.)
Якщо ви знайдете більше десятка залежностей у вашому додатку, то, ймовірно, потрібно розділити систему на окремі підсистеми (смію я сказати, мікросервіси?).