【问题标题】:Log4net Configuration with referenced library [duplicate]带有引用库的 Log4net 配置 [重复]
【发布时间】:2016-03-16 15:11:17
【问题描述】:

对另一个 log4net 配置问题表示歉意。 我有一个具有此方法的引用库:

public static ILog Logger = LogManager.GetLogger(typeof(MyClass));
public void InitializeLog()
{
    XmlConfigurator.Configure(new FileInfo("log4net.xml"));
    Logger.Info("Starting");
}

在使用此 DLL 的项目中,我在项目的根级别有 log4net.xml。它看起来像这样:

<log4net>
  <logger name="NHibernate">
    <level value="DEBUG" />
  </logger>
  <logger name="NHibernate.SQL">
    <level value="DEBUG" />
  </logger>
  <appender name="Console" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %level - %message%newline%newline" />
    </layout>
  </appender>

  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="C:\log\project.log" />
    <appendToFile value="true" />
    <maximumFileSize value="10000KB" />
    <maxSizeRollBackups value="5" />
    <layout type="log4net.Layout.PatternLayout">
      <footer value ="&#13;&#10;"/>
      <conversionPattern value="%date %level - %message%newline%newline" />
    </layout>
  </appender>

  <root>
    <level value="DEBUG" />
    <appender-ref ref="RollingFile" />
    <appender-ref ref="Console" />
  </root>
</log4net>

该项目在尝试记录任何内容之前调用InitializeLog()。但是,它甚至不会在开始时记录“正在启动”消息。当我调试该方法时,在 Logger 对象中我看到Configured = false。我感觉它与 xml 文件的路径有关,因为它在使用此库作为项目引用而不是外部引用的项目中运行良好(此处不是选项。)关于配置失败原因的想法.?

【问题讨论】:

  • log4net.xml 文件是否标记为“复制到输出目录”? (您可以检查 FileInfo 的 Exists 属性以查看它是否拾取)
  • @stuartd,是的,它设置为始终复制
  • 可以是任何东西。使用链接的问题找出您的错误。

标签: c# log4net log4net-configuration


【解决方案1】:

log4net 在当前文件夹中搜索配置。您需要指定配置文件的完整路径:

ASP.NET 应用程序

    protected void Application_Start()
    {
        ...
        string l4net = Server.MapPath("~/log4net.config");
        log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(l4net));
    }

WinForm 或控制台应用程序:

  1. 在解决方案资源管理器中右键单击 log4net.config,选择属性并设置复制到输出目录 - 如果更新则复制
  2. 使用输出目录的完整路径(您可以从另一个文件夹调用您的 exe)

    static void Main(string[] args)
    {
        var appPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
        log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(appPath));
    }
    

我的 log4net.config 的内容:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="osai.log" />
      <appendToFile value="true" />
      <encoding value="utf-8" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <maximumFileSize value="50MB" />
      <immediateFlush value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="Header" value="--- Application start ---&#xD;&#xA;" />
        <param name="Footer" value="--- Application stop ---&#xD;&#xA;" />
        <conversionPattern value="%d [%t] %-5p %c - %m%n" />
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>
</configuration>

【讨论】:

  • Server 的完整命名空间是什么? VS 给了我一些选择。
  • 是 Asp.Net 命名空间 System.Web。请参阅 WinForm 或控制台应用程序的答案更新。
  • 这两个都不走运。
  • 您的配置无效。添加我的配置以回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
相关资源
最近更新 更多