【问题标题】:Why is Log4Net not creating log file in production?为什么 Log4Net 不在生产环境中创建日志文件?
【发布时间】:2009-08-22 14:01:00
【问题描述】:

我正在使用VS2005,一个网站项目,一个网络部署项目和Log4Net。我在本地开发时可以使用日志记录。我可以看到日志文件,一切都很好。当我构建我的网站时(使用 web 部署项目),我将部署用作单个 DLL 选项。然后,当我检查日志文件的位置时,我看不到任何文件。

有没有办法解决这个问题。我不认为将调试值添加到应用设置会有帮助,因为我没有控制台,因为它是一个网站。

编辑 我不希望最后一次浪费 150 个代表。我将开发环境的内部跟踪与生产环境的跟踪进行了比较。我的开发环境跟踪显示了对 Xml 配置器的调用,而生产环境则没有。我在 application_start() 方法的 global.asax 中有代码。我把调试代码放在那里,它在开发中被调用,但在生产中没有。

我认为这是 Web 部署项目引起一些问题的地方。 global.asax 是否被编译到单个 DLL 中?当我在部署目录中进行构建时,我看到了一个 global.compiled 文件。这必须进入生产中的 bin 文件夹吗?还是单个 DLL 中的 global.asax 代码?将两者都放在 bin 文件夹中或仅包含 DLL 并没有改变任何东西。

【问题讨论】:

    标签: asp.net log4net


    【解决方案1】:

    已修复。在“属性->安全->编辑”中为应该创建“日志”文件的项目文件夹添加具有“写入”权限的用户(这是启动 IIS 工作进程)。

    【讨论】:

      【解决方案2】:

      工作进程是否有足够的权限写入日志目录?我猜情况并非如此。您可能希望授予工作进程组写入目录的权限,看看是否可以解决您的问题。

      【讨论】:

      • 我必须向哪些组授予写入权限。我以为是网络服务?
      • 我想我会使用一个本地组 IIS_WPG。通常,任何运行工作进程的帐户都应该放在这个组中。如果您出于其他原因决定更改帐户,使用该组可以保护您。此外,如果您的日志目录位于网站中,请确保对其设置了一些保护,这样人们就无法对其进行请求。
      • 感谢您的建议。有什么地方我可以读到这个。我对安全性和权限真的很陌生。
      • 您可能想尝试 IIS 的文档。 technet.microsoft.com/en-us/library/cc775635(WS.10).aspx (IIS6) 或 iis.net (IIS7)。
      【解决方案3】:

      将此添加到 AssemblyInfo.cs 文件中并检查

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

      【讨论】:

        【解决方案4】:

        我发现了问题。权限是正确的。事实证明,使用 Web 部署项目还会在根目录中创建一个 precompliled.config 文件。我没有将它复制到生产环境中。一旦那是在一切工作。对不起,没有人得到赏金。

        【讨论】:

          【解决方案5】:

          看起来问题的根源在于 global.asax 中的 Application_Start 事件没有触发。

          从 VS 2005 部署到 Windows 2003 时存在一个“已知”问题,即 Application_Start 不会触发。

          Global.asax.cs 的内容将被编译到 dll 中。 但除非存在 Global.asax 文件,否则 Application_Start 不会运行。

          这里有几个相关链接:

          http://accidentaltechnologist.com/asp-net/application_start-not-firing-and-the-globalasax/

          http://www.velocityreviews.com/forums/t300292-web-deployment-projects-globalasax-problem.html

          以上链接中还介绍了其他一些可能性。

          希望对你有帮助

          设拉子

          【讨论】:

            【解决方案6】:

            这曾经发生在我身上,是 ASPNET 用户在需要的地方创建文件的权限。是否可以检查 Windows 事件日志中是否有任何内容表明这一点?

            为了检查类型(我们观察观察者!),我们通过使用OutputDebugString() via pinvoke. 将其写出来输出 log4net 将在哪里工作。我们还将它放在一个 try catch 中,以确保我们发现与此相关的错误,因为使用它能够正确记录非常重要。

            【讨论】:

              【解决方案7】:

              检查预期输出目录的权限并确保网络服务可以写入。最简单的方法是运行 filemon.exe(一个 SysInternals 应用程序)并相应地限制它。这应该会告诉您是否有任何故障,您可以根据需要进行修复

              【讨论】:

              • 我已经运行了 filemon 并过滤了 *log。唯一出现的文件是 Log4Net 的内部调试文件。它没有尝试打开向所需日志文件写入任何内容。
              【解决方案8】:

              确保 log4net get 配置正确。也许 dll 没问题,但配置文件丢失了? log4net 可能在那里,但没有任何活动的附加程序。

              【讨论】:

                【解决方案9】:

                为了确保 log4net 配置正确,我创建了一个记录到端口 9090 的 UDP Appender。我使用链锯 http://logging.apache.org/chainsaw/index.html 检查日志条目。

                您可以通过它检查是否至少完成了一些日志条目以及记录器是否正在运行。

                UDP Appender 配置

                <appender name="UdpAppender" type="log4net.Appender.UdpAppender">
                        <remoteAddress value="localhost" />
                        <remotePort value="9090" />
                        <layout type="log4net.Layout.XmlLayoutSchemaLog4j">
                            <locationInfo value="true" />
                        </layout>
                </appender>
                

                电锯 XML

                <?xml version="1.0" encoding="UTF-8" ?>
                <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
                <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">    
                    <plugin name="LocalReceiver" class="org.apache.log4j.net.UDPReceiver">
                        <param name="Port" value="9090" />
                    </plugin>    
                </log4j:configuration>
                

                【讨论】:

                • 我试过这个。有几件事让我感到困惑。我没有 log4j 配置文件。我正在使用 Log4net。这仍然有效吗?接下来,我使用我的 web 配置文件来保留我的设置(在开发中工作)。我打开了 9090 端口,但 Chainsaw 似乎在监听 4445 和 4560 端口。我应该把上面的内容放在某个文件中再试一次吗?
                • 另外,最后一件事,我看到您将插件指向一个 apache 类。我必须也下载这些课程还是将它们包含在 webstart 中?
                • 只需将第二个 xml 保存为文件,一旦启动电锯,就可以打开配置文件 -> 如果没有要求您选择配置文件,则必须删除“。电锯”目录在您的用户目录中。您不需要 log4j 配置,只需使用您的 web.config -> 但按上述配置添加此附加程序
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-02-06
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多