-1

我想在我的 C# 应用程序中使用 log4net。

我为 log4net 制作了配置文件:ConsoleTest.exe.log4net并在属性选项中设置复制到目标文件夹:

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

我没有得到任何输出:(

哪里有问题?

编辑: 我的配置文件正确吗?

4

3 回答 3

1

“输出”是什么意思?

是否创建了日志文件?您的过滤器会排除所有不包含“测试”或“错误”的日志记录,但应创建一个长度为零的文件。移除过滤器元件以解决此问题。

使用此配置,您的控制台和跟踪记录器将不会收到任何信息。如果您想查看控制台输出,请将 <appender-ref ref="ConsoleLogger" /> 添加到您的根元素。

不是错误,但在使用单独的文件进行 log4net 配置时,您只需要 log4net 部分。还要检查基础知识:您的配置文件是构建输出的一部分吗?

于 2013-11-04T10:28:35.930 回答
1
 <filter type="log4net.Filter.StringMatchFilter">
   <stringToMatch value="test"/>
 </filter>
 <filter type="log4net.Filter.StringMatchFilter">
    <stringToMatch value="error"/>
  </filter>
 <filter type="log4net.Filter.DenyAllFilter"/>

这些行意味着您将只记录包含testerror的消息。

您还可能缺少用于配置的结束标记。

于 2013-11-04T11:47:00.357 回答
0

你打开日志了吗?我们的 Global.asax 中有以下行

 log4net.Config.XmlConfigurator.Configure();
于 2013-11-03T19:40:36.617 回答