我想在C#中的应用程序中使用log4net。
我为log4net创建了配置文件:ConsoleTest.exe.log4net
并在properties选项中设置以复制到目标文件夹:
<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{ABSOLUTE} [%thread] %level %logger - %message%newlineExtra Info: %property{testProperty}%newline%exception" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="FATAL" />
</filter>
</appender>
<appender name="TraceAppender" type="log4net.Appender.TraceAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p %c %m%n"/>
</layout>
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="mylogfile.txt"/>
<appendToFile value="true"/>
<rollingStyle value="Size"/>
<maxSizeRollBackups value="5"/>
<maximumFileSize value="10MB"/>
<staticLogFileName value="true"/>
<filter type="log4net.Filter.StringMatchFilter">
<stringToMatch value="test"/>
</filter>
<filter type="log4net.Filter.StringMatchFilter">
<stringToMatch value="error"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline%exception"/>
</layout>
</appender>
<root>
<level value="INFO"/>
<appender-ref ref="RollingFileAppender"/>
</root>
<logger name="Log4NetTest.OtherClass">
<level value="DEBUG"/>
<appender-ref ref="RollingFileAppender"/>
</logger>
</log4net>
在Visual Studio 2012的项目中,在属性中,在文件AssemblyInfo.cs
中,我添加了:
[assembly: log4net.Config.XmlConfigurator(
ConfigFile = "ConsoleTest.exe.log4net", Watch = true)]
在我要记录的班级中,我添加了:
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
但是当我在这堂课写作时:
log.Debug("This is a DEBUG level message. The most VERBOSE level.");
log.Info("Extended information, with higher importance than the Debug call");
log.Warn("An unexpected but recoverable situation occurred");
我在输出中没有得到任何东西:(
哪里有问题?
修改 我的配置文件是否正确?
答案 0 :(得分:1)
“输出”是什么意思?
是否创建了日志文件?您的过滤器会排除所有不包含“test”或“error”的日志记录,但应创建一个零长度文件。删除过滤器元素以解决此问题。
您的控制台和跟踪记录器不会使用此配置接收任何内容。如果要查看控制台输出,请添加&lt; appender-ref ref =“ConsoleLogger”/&gt;你的根元素。
不是错误,但在使用单独的文件进行log4net配置时,您只需要log4net部分。另请查看基础知识:您的配置文件是构建输出的一部分吗?
答案 1 :(得分:1)
<filter type="log4net.Filter.StringMatchFilter">
<stringToMatch value="test"/>
</filter>
<filter type="log4net.Filter.StringMatchFilter">
<stringToMatch value="error"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
这些行意味着您只会记录包含测试或错误的邮件。
您还希望错过配置的结束标记。
答案 2 :(得分:0)
你开启了伐木吗? 我们的Global.asax
中有以下行 log4net.Config.XmlConfigurator.Configure();