Ошибка Log4NET: не удалось найти тип System.Text.UTF8Encoding - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь использовать Log4Net Rolling File Appender для создания файла журнала, когда возникает проблема с моими данными. Поскольку я работаю с диакритическими и нелатинскими символами, я хочу, чтобы кодировка файла была в UTF-8.

Обычно, если файл не содержит диакритических / нелатинских символов, он кодируется как ASCII. Если он записывает диакритические / нелатинские символы, он автоматически кодирует его в UTF-8. Я хочу, чтобы он всегда был в UTF-8.

Моим первым решением было использование <encoding value="utf-8"/>. Это дает мне UTF-8 с спецификацией, чего я не хочу. Итак, это решение Stackoverflow подсказало мне использовать <encoding type="System.Text.UTF8Encoding"/>. Я попробовал это, и я получил бы эту ошибку:

log4net:ERROR Failed to find type [System.Text.UTF8Encoding]
System.TypeLoadException: Could not load type 'System.Text.UTF8Encoding' from assembly 'log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a'.
   at System.Reflection.RuntimeAssembly.GetType(RuntimeAssembly assembly, String name, Boolean throwOnError, Boolean ignoreCase, ObjectHandleOnStack type, ObjectHandleOnStack keepAlive)
   at System.Reflection.RuntimeAssembly.GetType(String name, Boolean throwOnError, Boolean ignoreCase)
   at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.CreateObjectFromXml(XmlElement element, Type defaultTargetType, Type typeConstraint)
log4net:ERROR Failed to create object to set param: encoding

Я попытался покопаться в Jira Apache и нашел этот пост , который также сказал мне использовать <encoding type="System.Text.UTF8Encoding"/>, который был таким жекак решение Stackoverflow.

Тогда я предположил, что это может быть из-за того, что я использую .NET Core 2.2, и мне пришлось попробовать другой тип. Я также попробовал <encoding type="System.Text.Encoding.UTF8"/>, <encoding type="UTF8Encoding"/>, <encoding type="Encoding.UTF8"/>, но ни один из них не сработал.

Вот часть приложения моего XML:

<appender name="file" type="log4net.Appender.RollingFileAppender">
      <threshold value="WARN" />
      <file type="log4net.Util.PatternString" value="%property{LogName}" />
      <appendToFile value="true" />
      <!--<encoding value="utf-8"/>-->
      <encoding type="System.Text.UTF8Encoding"/>
      <rollingStyle value="Size" />
      <maximumFileSize value="1GB" />
      <staticLogFileName value="false" />
    </appender>

Есть ли другаянастройки мне нужно сделать?

1 Ответ

0 голосов
/ 26 октября 2019

Вы получаете эту ошибку, потому что System.Text.UTF8Encoding пытается загрузить из сборки log4net;из ошибки:
Не удалось загрузить тип 'System.Text.UTF8Encoding' из сборки 'log4net ...

Для .NET Core, System.Text.UTF8Encoding объявлен как

Класс кодирования UTF8
Пространство имен: System.Text
Сборки: System.Text.Encoding.Extensions.dll, mscorlib.dll, netstandard. dll

Параметр encoding type в вашей конфигурации log4net должен включать одну из упомянутых сборок, например:

<encoding type="System.Text.UTF8Encoding, System.Text.Encoding.Extensions" />

Наличие этого на месте приводит кфайл без BOM:

enter image description here

В то время как при использовании <encoding value="utf-8" /> действительно включается BOM:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...