【问题标题】:I cannot make log4net work in my web application :(我无法在我的 Web 应用程序中使 log4net 工作:(
【发布时间】:2011-02-08 07:50:24
【问题描述】:

我正在尝试设置 log4net,但我无法使其工作。我已经把它放在了我的 Web.config 中:

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

<log4net>
  <appender name="TraceAppender" type="log4net.Appender.TraceAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
  </appender>

  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="logfile.log" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <maxSizeRollBackups value="14" />
    <maximumFileSize value="15000KB" />
    <datePattern value="yyyyMMdd" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
  </appender>

  <root>
    <level value="DEBUG" />
    <appender-ref ref="RollingFileAppender" />
    <appender-ref ref="TraceAppender" />
  </root>
</log4net>

然后,在我的代码中执行:

log4net.Config.XmlConfigurator.Configure(new FileInfo(HttpContext.Current.Server.MapPath("~/Web.config")));
ILog log = LogManager.GetLogger("MainLogger");

if (log.IsDebugEnabled)
    log.Debug("lalala");

但是什么也没发生。我检查了“log”变量,它包含一个启用了所有日志记录级别的 LogImpl 对象。我没有收到错误或配置警告,我在根目录、bin 或任何地方都看不到任何文件。

我必须做些什么才能让它发挥作用?

【问题讨论】:

  • 如果您可以在 Visual Studio 中进行调试,请在应用启动时检查“输出”窗口。 log4net 在那里输出有关配置错误的任何信息。
  • 您是否尝试过为file 属性设置绝对路径? (例如C:\logfile.log
  • 除了下面的优秀答案之外,您应该在应用程序进程的整个生命周期内只调用一次配置,例如在 Global.asax 中的应用程序开始中。

标签: .net asp.net logging log4net


【解决方案1】:

您的 AssemblyInfo.cs 文件中有这一行吗?

[assembly: log4net.Config.XmlConfigurator()]

此外,您应该考虑 Eric 在下面的回答中使用的“typeof(YourClass)”方法。我第一次对我的一个答案投票。 :)

您没有定义 TraceAppender。

您没有配置名为“MainLogger”的记录器

<logger name="MainLogger">
  <level value="DEBUG"/>
  <appender-ref ref="RollingFileAppender" />
  <appender-ref ref="TraceAppender" />
</logger>

另外,看看here

【讨论】:

  • 但他确实定义了一个 ,这是一个包罗万象/默认设置。
  • 公平点。我习惯说得很具体。我的答案不正确,我会在找到正确答案后立即更新
  • 添加,我得到重复的行,但如果我删除根,那么它工作正常! :P 谢谢!
  • 那很好。请记住,您现在必须始终显式调用该记录器。
【解决方案2】:

您将需要另一种方法来配置 log4net:log4net.Config.XmlConfigurator.Configure()

然后它会自动读取web.config。

请参阅“.config 文件”部分下的 http://logging.apache.org/log4net/release/manual/configuration.html

【讨论】:

    【解决方案3】:

    试着写:

    log4net.Config.XmlConfigurator.Configure();
    

    相反,因为 Web.config 是 Log4Net 的默认位置。

    否则,请从您的代码中删除整行并将以下内容粘贴到您的 AssemblyInfo.cs 中:

    [assembly: log4net.Config.XmlConfigurator()]
    

    这将在程序集级别配置 Log4Net。然后在你的代码中,创建一个像这样的记录器:

    private static readonly ILog Log = LogManager.GetLogger(typeof(YourFunkyClass));
    

    【讨论】:

      【解决方案4】:

      这是我的工作解决方案:

      Configuration oConfiguration = WebConfigurationManager.OpenWebConfiguration(oRequest.ApplicationPath);
      
      log4net.Config.XmlConfigurator.Configure(new FileInfo(oConfiguration.FilePath));
      

      【讨论】:

        猜你喜欢
        • 2010-10-07
        • 2012-07-19
        • 2018-05-08
        • 1970-01-01
        • 2015-07-19
        • 2021-10-26
        • 2021-07-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多