【问题标题】:Log4Net does not log from a class libraryLog4Net 不从类库中记录
【发布时间】:2013-11-26 10:23:48
【问题描述】:

我正在使用 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>

这是我在AssemblyInfo.cs 中输入的内容:

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

这是我要记录的文件中的内容:

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


log.Debug("Testing");

当我运行我的程序时,什么也没有发生。有人知道为什么吗?

【问题讨论】:

  • 这对我有用。您是将 AssemblyInfo.cs 的代码放入库项目还是主项目?
  • 在图书馆项目中。
  • 这条线是干什么用的? &lt;add key="log4net.config" value="config.log4net"/&gt;

标签: log4net class-library


【解决方案1】:

类似于this answer,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");

【讨论】:

  • 如果Console是一个带有ILogService接口的项目并且Library是在Console应用中声明的服务的Log4Net实现,根据上述解决方案,我们必须添加对Log4Net的引用在控制台应用程序中。这是最佳做法吗?
【解决方案2】:

如果有人仍在查看此内容并添加到之前的答案中,您需要先在主机应用程序中实例化一个记录器,然后才能从类库中登录。

【讨论】:

  • 这是我的问题。我正在尝试为安装脚本执行 .dll 类。它需要在我的主应用程序运行之前运行。我认为这就是它不记录的原因。
【解决方案3】:

如果您查看log4net documentation for assembly attributes,它会说:

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

当在类库中定义程序集属性时 - 即外部程序集 - 它变得很棘手。可以改用log4net.Config.XmlConfigurator.Configure(path)吗?

【讨论】:

  • 我尝试使用 log4net.Config.XmlConfigurator.Configure() 但随后收到此错误堆栈:log4net:ERROR Failed to find configuration section 'log4net' in the application's .config file.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
相关资源
最近更新 更多