Как включить конфигурационные файлы NLog в код позади - PullRequest
0 голосов
/ 21 января 2020

У меня есть nlog.config файл со следующей записью:

<include file="${basedir}/ActiveConfig/NLog/*.config"/>

Но я хочу решить эту проблему с помощью кода и не нашел способа сделать это.

LogManager.LoadConfiguration()

перезаписывает мою существующую конфигурацию.

Я что-то пропустил?

Ответы [ 2 ]

2 голосов
/ 07 февраля 2020

Вы можете установить это так:

var config = XmlLoggingConfiguration
              .CreateFromXmlString("<include file='${basedir}/ActiveConfig/NLog/*.config' />");
LogManager.Configuration = config; // apply
1 голос
/ 21 января 2020

Подумайте, что простое решение - просто загрузить все файлы конфигурации в поток памяти, а затем загрузить их в один XmlLoggingConfiguration:

var xmlReader = System.Xml.XmlReader.Create(memorystream);
NLog.LogManager.Configuration = new XmlLoggingConfiguration(xmlReader, null);

Примерно так, куда вы помещаете содержимое всех конфигурационных файлов в одном и том же <nlog> - root:

<nlog>
   <!-- XML File 1 -->
   <targets>
   </targets>
   <rules>
   </rules>
   <! -- XML File 2 -->
   <targets>
   </targets>
   <rules>
   </rules>
</nlog>

Если вы хотите, чтобы функция автозагрузки также работала, то это может работать:

class MySpecialLoggingConfiguration : XmlLoggingConfiguration
{
    private string[] _fileNames;

    public MySpecialLoggingConfiguration(string[] fileNames)
    {
        _fileNames = fileNames;

        // Your special concat-logic in memory
    }

    public override LoggingConfiguration Reload()
    {
        return new MySpecialLoggingConfiguration(_fileNames);
    }

    public override IEnumerable<string> FileNamesToWatch => _fileNames;
}
...