我正在项目中使用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
答案 0 :(得分:0)
此错误的原因是因为无法通过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;
答案 1 :(得分:0)
好问题!
我从中学到了很多东西。
请不要忘记在开始记录之前调用此方法。
log4net.Config.XmlConfigurator.Configure();
app.config是。
<layout>
元素。%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>
这是我学到的地方