Я чувствую, что мы работаем над одним проектом! Несколько проектов, состоящих из веб-проектов, базовых dll-проектов, консольных приложений, сервисов и т. Д. К сожалению, я не работаю в sharepoint, как вы, но я могу описать, как я пытаюсь централизовать нашу регистрацию.
У нас есть один базовый проект .Net Framework. Именно здесь я разместил наш класс-оболочку журнала. Этот проект также содержит DLL-файлы nlog и файл конфигурации nlog. В этот основной файл проекта вы можете добавить его, который автоматически перемещает конфигурацию при создании проектов с зависимостью от этого основного проекта.
<None Include="Logging\NLog.config">
<link>NLog.config</link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
Мы обнаружили, что некоторые веб-проекты, которые не компилируют dll, автоматически не извлекают файл конфигурации, поэтому мы оставим это до процесса сборки. Это помогает централизовать нашу регистрацию, поэтому вам нужно всего лишь управлять одной конфигурацией.
Кроме того, помните, что когда вы создаете регистратор для каждого класса, имя журнала должно содержать пространство имен, чтобы вы могли создавать конкретные цели, которые фильтруются на основе пространства имен, если вам нужны другие настройки для конкретных проектов.
Что касается централизации, где заканчиваются журналы, мы решили использовать цель файла и указать полный путь. Это потому, что на наших серверах приложения запускаются из C: \, но у нас есть большие D: \, которые могут хранить журналы. На наших производственных серверах у нас также есть несколько серверов, поэтому мы используем Splunk для объединения всех наших журналов.
Если о splunk не может быть и речи, и вы работаете в распределенной системе, база данных звучит как хорошая идея, как предложено выше. Если вы не хотите поддерживать экземпляр SQL, есть целевые оболочки для mongo db.
Надеюсь, полезно, мне любопытно, если у кого-то есть предложения или мнения о том, как я это делаю!