【问题标题】:log4net with ASP.NET 3.5 problemslog4net 与 ASP.NET 3.5 问题
【发布时间】:2010-09-18 11:21:39
【问题描述】:

我在让 log4net 从 ASP.NET 3.5 工作时遇到了一些问题。这是我第一次尝试使用 log4net,我觉得我错过了一块拼图。

我的项目引用了 log4net 程序集,据我所知,它已成功部署在我的服务器上。

我的 web.config 包含以下内容:

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

  <log4net>
    <appender name="InfoAppender" type="log4net.Appender.FileAppender">
      <file value="..\..\logs\\InfoLog.html" />
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern
          value="%d [%t] %-5p %c [%x] - %m%n" />
      </layout>
    </appender>
    <logger name="_Default">
      <level value="INFO" />
      <appender-ref ref="InfoAppender" />
    </logger>
  </log4net>

我正在使用以下代码来测试记录器:

using log4net;
using log4net.Config;

public partial class _Default : System.Web.UI.Page
{
    private static readonly ILog log = LogManager.GetLogger("_Default");

    protected void Page_Load(object sender, EventArgs e)
    {
        log.Info("Hello logging world!");
    }
}

在我的 Global.asax 中,我正在执行以下操作:

void Application_Start(object sender, EventArgs e) 
{
    log4net.Config.XmlConfigurator.Configure();
}

在这一点上,我想不出我可能做错了什么。我试图存储日志的目录是可写的,即使我尝试不同的目录,我也会得到相同的结果:没有文件,没有日志。

有什么建议吗? :-)


编辑:我为日志文件的路径和名称尝试了几种不同的格式,其中一些包括“..\..\InfoLog.html”、“InfoLog.html”、“logs\InfoLog.html "等,以防有人想知道这是否是问题所在。


编辑:我已将根记录器节点添加回 log4net 部分,我在从示例中复制时无意中忽略了这一点。根记录器节点如下所示:

<root>
  <level value="INFO" />
  <appender-ref ref="InfoAppender" />
</root>

然而,即使有了它,我仍然没有运气。

【问题讨论】:

    标签: asp.net .net-3.5 web-config log4net global-asax


    【解决方案1】:

    我认为根记录器是强制性的。我怀疑配置失败是因为 root 不存在。

    另一个潜在问题是 Configure 没有指向 Web.config。

    改用 Configure(Server.MapPath("~/web.config"))。

    【讨论】:

    • log4net.Config.XmlConfigurator.Configure() 可以很好地从 web.config 中提取配置...但我同意根记录器遗漏是一个问题。
    • 我现在正在尝试将根记录器添加回我的 web.config,希望可以解决这个问题 :-)
    • 将根目录留在那里,将日志目标文件更改为绝对路径。并尝试我的配置建议。
    • 我查看了我的代码。我的设置在不同的文件 - log4net.config 中有 log4net 配置,我使用 Configure(Server.MapPath("~/log4net.config"))。这适用于我的 ASP.NET 应用程序
    • 我会在早上尝试一下您的配置建议 - 谢谢!
    【解决方案2】:

    对我来说,这听起来很像文件权限问题。如果您指定的文件名没有任何路径,log4net 将写入 Web 应用程序的根目录。试试看。除非在那里取得任何成功,否则我建议您通过在 web.config 中添加以下内容来启用内部 log4net 调试:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <appSettings>
            <add key="log4net.Internal.Debug" value="true"/>
        </appSettings>
    </configuration>
    

    然后,部署在调试模式下编译的应用程序并运行visual studio remote debugger 以查看引发的任何错误。

    【讨论】:

    • 这确实很有帮助。此外,您还可以临时配置跟踪以找出 log4net 设置的问题,如下所示:
    • Kay 提到的启用跟踪是一个很好的提示。在我这样做并发现错误之前,我一无所获。
    【解决方案3】:

    我花了 3 个小时试图解决这个问题,结果是 web.config 格式。

    我有这个,但它不起作用:

    <section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" requirePermission="false"/>
          <section name="log4net"
            type="log4net.Config.Log4NetConfigurationSectionHandler
          , log4net"
            requirePermission="false"/>
    

    将其更改为此已修复:

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

    烦人!!

    【讨论】:

      【解决方案4】:

      仅供参考:文件路径的格式必须如下:

      <file value="..\\..\\logs\\InfoLog.html" />
      

      【讨论】:

        【解决方案5】:

        来自CodeProject的简单配置教程

        【讨论】:

          【解决方案6】:

          我没有在 .net 3.5 中运行的 Global.asx

          这是我的代码...我在单独的文件 log4net.config 中配置 log4net

          // Configure log4net using the .config file
          [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
          
          //My Web Services class name
          private static readonly log4net.ILog log = log4net.LogManager.GetLogger("Service1");
          

          【讨论】:

            【解决方案7】:

            我有同样的(令人沮丧的)问题。我将根移动到 log4net 配置部分的顶部,一切正常。此外,我也有 root 和一个记录器元素,这导致每次我调用记录器时都会出现两行。我删除了 logger 元素,只保留了 root 及其正常工作。

            【讨论】:

              【解决方案8】:

              如何使用页面类型创建记录器,如下所示:

              private static readonly ILog log = LogManager.GetLogger(typeof(_Default));
              

              【讨论】:

                【解决方案9】:

                这就是我在 Global.ASX 中所拥有的。一切都在 asp.net 3.5 中工作

                <%@ Application Language="C#" %>
                
                <script runat="server">
                
                    void Application_Start(object sender, EventArgs e) 
                    {
                        // Code that runs on application startup
                         log4net.Config.XmlConfigurator.Configure(); 
                    }
                
                    void Application_End(object sender, EventArgs e) 
                    {
                        //  Code that runs on application shutdown
                        log4net.LogManager.Shutdown();
                    }
                
                    void Application_Error(object sender, EventArgs e) 
                    { 
                        // Code that runs when an unhandled error occurs
                    }
                
                    void Session_Start(object sender, EventArgs e) 
                    {
                        // Code that runs when a new session is started
                    }
                
                    void Session_End(object sender, EventArgs e) 
                    {
                        // Code that runs when a session ends. 
                        // Note: The Session_End event is raised only when the sessionstate mode
                        // is set to InProc in the Web.config file. If session mode is set to StateServer 
                        // or SQLServer, the event is not raised.
                    }
                </script>
                

                【讨论】:

                  猜你喜欢
                  • 2010-10-05
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-11-05
                  • 2011-02-15
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多