Как записать конфигурацию log4net в appsettings.json? - PullRequest
0 голосов
/ 29 августа 2018

Я ввел log4net в .NET core 2.0, чтобы войти в текстовый файл. В log4net есть файл конфигурации, в котором есть XML configuration. Итак, я создал отдельный файл log4net.config, чтобы установить его конфигурацию, и он работает нормально. Но я хочу установить его конфигурацию в appsettings.json. Можно ли записать конфигурацию log4net в appsettings.json.

<appSettings>
    <add key="IsLog" value="True" />
    <add key="MaxThreads" value="3" />
  </appSettings>
  <log4net debug="false">
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
 <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="./logs/logfile.txt" />
    <appendToFile value="false" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="-1" />
    <maximumFileSize value="50GB" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
</appender>   
  </log4net>

это моя конфигурация XML.

Я нашел этот вопрос , в котором упоминается, что log4net don't support Json projects. Можно ли записать свою конфигурацию в appsettings.json.

1 Ответ

0 голосов
/ 13 сентября 2018

Возможно, это не правильный путь, но, в любом случае, мне удалось использовать мой log4net.config в appSettings.json. Я помещаю свой ответ здесь, чтобы он мог помочь кому-то, если он не хочет использовать дополнительный конфигурационный файл для своего проекта.

То, что я сделал, похоже на преобразование моего XML в JSON и использование JSON в качестве строки в моем appSettings.json, после чего я использую следующий код для чтения строки.

appSettings.json

{
  "ConnectionStrings": {
    "LoggerConfig": "Config string"
  }
}

Json в XML Преобразование с использованием Newtonsoft.Json

 string xmlElement = _configuration["ConnectionStrings:LoggerConfig"];
 XmlDocument doc = (XmlDocument)JsonConvert.DeserializeXmlNode(xmlElement);
 XmlConfigurator.Configure(logRepository, GenerateStreamFromString(doc.InnerXml));

Этот код используется для преобразования JSON в XML , но он не будет предоставлять содержимое XML как Элемент , поэтому я использовал его в качестве потока. Для преобразования строки в поток я использовал следующий код.

        public static Stream GenerateStreamFromString(string s)
        {
            var stream = new MemoryStream();
            var writer = new StreamWriter(stream);
            writer.Write(s);
            writer.Flush();
            stream.Position = 0;
            return stream;
        }

и работает нормально.

Здесь я использовал сначала мой XML to JSON, а затем JSON to XML в используйте его как log4net config, но если кто-то захочет, используйте XML непосредственно в виде строки, так что это уменьшит некоторый код.

...