Ошибка Log4net - не работает шаблонная строка - PullRequest
0 голосов
/ 17 июня 2019

Я создаю компонент ведения журнала, используя log4net в моем проекте. Я создал XML-файл для настройки параметров log4net, включая определение приложения и регистратора. Я использую PatternString, чтобы выбрать значение свойства из файла appsetting.config. Однако, когда я собираю и запускаю проект, он выдает следующую ошибку:

log4net:ERROR Undefined level [%property{Level}] on Logger [Test].

Кто-нибудь знает, что может быть причиной?

XML:

<?xml version="1.0" encoding="UTF-8" ?>
<log4net>
  <logger name="Test">
    <level type="log4net.Util.PatternString" value="%property{Level}" />
    <appender-ref ref="JsonFileAppender" />
  </logger>
</log4net>

appsetting.config

<appSettings>
  <add key="Level" value="ALL"/>
</appSettings>

В случае, если это полезно, версия log4net: версия: 2.0.8

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Хороший вопрос!

Я многому научился.

Пожалуйста, не забудьте вызвать этот метод перед началом регистрации.

log4net.Config.XmlConfigurator.Configure();

app.конфиг есть.

  1. если вам нужно применить шаблон, используйте элемент <layout>.
  2. и, если вы хотите использовать какое-либо значение из "appSettings", используйте вот так: %appSetting{Environment}
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>

      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
      </configSections>

      <log4net>
          <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
              <layout type="log4net.Layout.PatternLayout">
                  <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
              </layout>
          </appender>
          <root>
              <level value="%appSetting{Environment}" />
              <appender-ref ref="ConsoleAppender" />
          </root>
      </log4net>     

      <appSettings>
        <add key="Environment" value="INFO" />
        <!-- this is optional flag.-->
        <add key="log4net.Internal.Debug" value="True" />    
      </appSettings>  
    </configuration>

Здесь я узнал

0 голосов
/ 18 июня 2019

Причина этой ошибки в том, что уровень регистратора не может быть настроен с помощью PatternString.
. Элементы <level> ожидают общеизвестное значение, например, например.ALL, DEBUG, INFO, WARN, ERROR,
например .:

<logger name="Test">
    <level value="All" />
</logger> 

В ваших настройках я прочитал, что вы пытаетесь применитьустановка от AppSettings.config на уровне журнала регистратора в вашей конфигурации Log4net.
Как объяснено выше, это не может быть сделано.

Либо оставьте все настройки, связанные с Log4net, в своих собственныхxml - в конце концов, это также конфигурация.

Или установить уровень программно;
вам придется преобразовать значение string в appsettings.config в Level самостоятельно.

logger = LogManager.GetLogger("Test");
Level level = // Parse from ConfigurationManager.AppSettings["Level"]
((Logger)logger.Logger).Level = level;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...