使用log4net作为类库?

时间:2014-10-31 17:30:13

标签: c# log4net app-config

我正在使用c#,visual studio 2008,.net framework 3.5,windows 7的控制台应用程序。我已经创建了一个log4net库,并计划在我的解决方案的几个项目中使用它。 / p>

这就是我的log4net库类的样子:

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

    public static void Method3(string message)
    {
        log.Debug(message);
    }
}

在我的主控制台项目中,我有这个:

   class Program
    {

        static void Main(string[] args)
        {
            LibraryLog3.LibraryLogClass1.Method3("test3");
        }
    }

我在我的控制台项目的AssemblyInfo.cs中添加了这一行:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

这是我的控制台项目中的App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
  </configSections>
  <log4net>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="LogFileAppender" />
    </root>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
      <file value="C:\test3.txt"/>
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="5" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d [%t] %-5p %c %m%n" />
      </layout>
    </appender>
  </log4net>
</configuration>

当我运行程序时,不会创建文件。

我该如何解决这个问题?

感谢

1 个答案:

答案 0 :(得分:3)

如果你看log4net documentation for assembly attributes,就会说:

&#34;因此,如果使用配置属性,则必须调用log4net 允许它读取属性。对LogManager.GetLogger的简单调用将导致调用程序集上的属性 被阅读和处理。 因此,必须在应用程序启动期间尽早进行日志记录调用,并且 当然,在加载和调用任何外部程序集之前。&#34;

在您的情况下,您对Method3的调用是加载库程序集,因此静态字段正在尝试从库日志类加载属性,其中属性未定义。

在我的主程序开始时,我通常会有这样的事情:

LogManager.GetLogger("Initialise log4net from the current assembly attributes");