【问题标题】:unable to write logs to a file using log4net in an ASP.NET Web Forms Site无法在 ASP.NET Web 窗体站点中使用 log4net 将日志写入文件
【发布时间】:2013-04-10 10:08:49
【问题描述】:

我在使用 log4net dll 记录到文本文件时遇到问题。

我在 windows server 2008 r2 标准 (64) 上使用 vs 2012 express。 我有以下步骤:

  1. 打开一个新的 asp.net 网页表单
  2. 通过 nuget 管理器安装 log4net。
  3. 在 global.asax 文件中,我在 Application_Start 中有这个:

    log4net.Config.XmlConfigurator.Configure ();
    
  4. 在网络配置中,我已将这一行添加到 configSections 节点:

  5. 在网络配置中我添加了这个部分:

    <log4net debug="true">
     <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
     <file value="c:\webSite\extraDownloadServerResources\Logs\ALU\log.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Composite"/>
    <datePattern value="yyyyMMdd" />
    <maxSizeRollBackups value="5" />
    <maximumFileSize value="5MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%n%-5p %d %5rms %-22.22c{1} %-18.18M %n - %m%n" />
    </layout>
    </appender>
    <root>
     <level value="DEBUG" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
    </log4net>
    
  6. 在启动页面中,我获取了记录器的实例:

    private static readonly ILog log = LogManager.GetLogger ( System.Reflection.MethodBase.GetCurrentMethod ().DeclaringType );
    
  7. Page_Load我写了这行:

    log.Debug(“测试”);

  8. 我已将具有读/写权限的 Dedualt 应用程序池用户添加到 log.txt 文件安全性。

我的日志文件中没有任何内容。 为了测试我所做的步骤,我创建了一个新的空网站并一一执行这些步骤。 唉(我喜欢这个词)这次日志已经写入文件了。

谁能指出一个可能的解决方案?

【问题讨论】:

  • 请根据您的具体问题更新您的标题。meta.stackexchange.com/questions/10647/…
  • 代码看起来没问题。尝试如下更改文件值
  • 不,那没用。这是一个与网站无关的外部文件。
  • 这里的主要问题是在空网站测试中,我确实将日志写入文件。
  • 同时,我尝试了另外两件事: * 在 configSection 节点的 log4net 行中添加了 requirePermission="false"。 * 向日志文件添加 iisuser 权限。没有变化。

标签: c# asp.net log4net


【解决方案1】:

要调试 log4net 配置问题,您应该enable log4net internal debugging

appSettings 内添加log4net.Internal.Debug 键如下:

<appSettings>
    <add key="log4net.Internal.Debug" value="true"/>
</appSettings>

这将使 log4net 能够将所有消息输出到控制台和Trace。要将所有诊断消息转发到文件,您可以添加跟踪侦听器:

<system.diagnostics>
    <trace autoflush="true">
        <listeners>
            <add      name="textWriterTraceListener" 
                type="System.Diagnostics.TextWriterTraceListener" 
                initializeData="C:\tmp\log4net.txt" />
        </listeners>
    </trace>
</system.diagnostics>

这些 sn-ps 直接取自 log4net FAQ,此处仅供快速参考。

这至少会让您了解正在发生的事情,因为您会收到错误消息。

【讨论】:

  • thanks.this 帮助我了解了有关 log4net 功能的另一件事,尽管对于写入跟踪文件,如果没有正确的用户名来授予访问权限,我也会遇到同样的问题。我想投票给你,但我仍然没有 15 分
  • @gilad 您仍然可以访问跟踪。通过授予每个人对 C:\tmp 文件夹的写入权限或使用跟踪查看器,如以下 MSDN 文章 msdn.microsoft.com/en-us/library/wwh16c6c(v=vs.100).aspx 中所述。
【解决方案2】:

我已经设法解决了我的问题。

我已经下载了tool 来监控所有的国际空间站流量。 在监控流量时,我看到用户名既不是 defaultAppPool 也不是 AppPoolName。 它是 ASP.NET v4.0。 在我授予权限并重新启动所有内容后,我终于在文件中看到了一些日志...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多