Log4net错误-patternstring不起作用

时间:2019-06-17 20:10:44

标签: c# log4net

我正在项目中使用log4net创建一个日志记录组件。我已经创建了一个xml文件来配置log4net设置,包括附加程序和记录器定义。我正在使用PatternStringappsetting.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 :(得分:0)

此错误的原因是因为无法通过PatternString配置记录器的级别。
<level>元素期望一个众所周知的值,例如。 ALLDEBUGINFOWARNERROR
例如:

<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;

答案 1 :(得分:0)

好问题!

我从中学到了很多东西。

请不要忘记在开始记录之前调用此方法。

log4net.Config.XmlConfigurator.Configure();

app.config是。

  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>

这是我学到的地方