Я решил эту проблему в прошлом, добавив экземпляр класса ведения журнала в базовый класс (ы) (или интерфейс, если это поддерживает язык) для классов, которым требуется доступ к ведению журнала. Когда вы что-то регистрируете, регистратор просматривает текущий стек вызовов и определяет из него вызывающий код, устанавливая правильные метаданные об операторе журналирования (метод источника, строка кода, если она доступна, класс, который регистрируется и т. Д.). Таким образом, минимальный В ряде классов есть регистраторы, и регистраторы не нуждаются в специальной настройке с метаданными, которые могут быть определены автоматически.
Это добавляет значительных накладных расходов, так что это не обязательно разумный выбор для ведения журналов производства, но аспекты логгера могут быть условно отключены, если вы спроектируете его таким образом.
Реально я большую часть времени использую регистрацию в общем достоянии (я много работаю в Java), но есть некоторые аспекты дизайна, которые я описал выше, которые я считаю полезными. Преимущества наличия надежной системы ведения журналов, которую кто-то уже потратил на отладку значительного времени, перевесили необходимость того, что можно считать более чистым дизайном (это, очевидно, субъективно, особенно с учетом отсутствия подробностей в этом посте).
У меня были проблемы со статическими регистраторами, вызывающие проблемы с памятью permgen (по крайней мере, я думаю, * в этом проблема ), поэтому я, вероятно, скоро вернусь к регистраторам.