Log4Net不从类库中记录

Vin*_*edo 8 log4net class-library

我正在使用Windows 7中的C#开发.NET Framework 4.0,并尝试从类库中进行日志记录,但它无法正常工作.我正在运行我的应用程序没有错误,但我的日志文件没有任何反应,也没有发生在我的控制台.

所以,这是我的代码:

这是我的App.config档案:

<?xml version="1.0"?>
<configuration>

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


  <add key="log4net.config" value="config.log4net"/>

  <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="DEBUG"/>
        <levelMax value="FATAL"/>
      </filter>
    </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="debug"/>
      </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="DEBUG"/>
      <appender-ref ref="ConsoleAppender"/>
      <appender-ref ref="RollingFileAppender"/>
    </root>
    <logger name="MyApplication">
      <level value="DEBUG"/>
      <appender-ref ref="ConsoleAppender"/>
      <appender-ref ref="RollingFileAppender"/>
    </logger>
  </log4net>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>

</configuration>
Run Code Online (Sandbox Code Playgroud)

这就是我对我的看法AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试记录的文件:

private static readonly ILog log = LogManager.GetLogger(
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);


log.Debug("Testing");
Run Code Online (Sandbox Code Playgroud)

当我运行我的程序时没有任何反应.有人知道为什么吗?

mat*_*tth 21

此答案类似,app.config,log4net配置和AssemblyInfo.cs配置程序都需要放在主机应用程序中.

假设我将项目Console作为我将运行的控制台项目,并Library作为库项目.Console将需要一个带有上述log4net配置的app.config文件,而AssemblyInfo.cs将需要其中的XmlConfigurator代码.Library不需要其中任何一个,并将使用该LogManager调用.

Console                 > This is the project that you will run.
    Properties
        AssemblyInfo.cs > Place [assembly: log4net.Config.XmlConfigurator(Watch = true)] here.
    app.config          > Place log4net XML configuration here.
    Program.cs          > Start of application.

Library
    Properties
        AssemblyInfo.cs > Leave this file alone.
    Foo.cs              > Create the private readonly property.
        SomeMethod()    > log.Debug("Test");
Run Code Online (Sandbox Code Playgroud)

  • 如果Console 是一个带有`ILogService` 接口的项目,而Library 是一个`Log4Net` 实现对Console 应用程序中声明的服务,按照上面的解决方案,我们必须在Console 应用程序中添加对Log4Net 的引用。这是最佳做法吗? (2认同)