Asp.net 为什么Log4Net不在生产中创建日志文件?

Asp.net 为什么Log4Net不在生产中创建日志文件?,asp.net,log4net,Asp.net,Log4net,我正在使用VS2005,一个网站项目,一个web部署项目和Log4Net。我可以在本地开发时使用日志记录。我可以看到日志文件,一切都很好。当我构建我的网站(使用web部署项目)时,我使用部署作为单个DLL选项。当我检查日志文件的位置时,我看不到任何文件 有没有办法解决这个问题。我不认为向应用程序设置添加调试值会有帮助,因为我没有控制台,因为它是一个网站 编辑 我不想让这150个代表浪费掉最后一次。我将开发环境中的内部跟踪与生产环境中的跟踪进行了比较。My dev environment trac

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

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

编辑 我不想让这150个代表浪费掉最后一次。我将开发环境中的内部跟踪与生产环境中的跟踪进行了比较。My dev environment trace显示了对Xml配置程序的调用,而生产配置程序没有。我在global.asax中有关于应用程序\u start()方法的代码。我把调试代码放在那里,它在开发中被调用,但在生产中没有


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

这在我之前发生过,并且是ASPNET用户在需要时创建文件的权限。是否可以检查windows事件日志中是否有任何指示


为了检查这类事情(我们观察观察者!),我们使用。我们还将其放在一个try-catch中,以确保发现与此相关的错误,因为使用它能够正确记录日志非常重要。

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

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

确保正确配置了log4net get。可能dll正常,但配置文件丢失了?log4net可能在那里,但没有任何活动的附加器。

为了确保log4net配置正确,我创建了一个UDP附加器,记录到端口9090。我用链锯检查日志条目

通过此操作,您可以检查至少完成了一些日志条目,并且日志记录器正在运行

UDP追加器配置

<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>

看来问题的根源在于global.asax中的应用程序启动事件没有启动

从VS 2005部署到Windows 2003时,存在一个“已知”问题,即应用程序启动时未启动

Global.asax.cs的内容将编译到dll中但除非文件Global.asax存在,否则应用程序\u Start将不会运行。

以下是几个相关链接:

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

希望这有帮助


设拉子我发现了问题。权限是正确的。事实证明,使用web部署项目也会在根目录中创建一个precompiled.config文件。我没有把它复制到生产部门。这一次,一切都很顺利。抱歉,没有人得到赏金。

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

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

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

我必须向哪些组授予写入权限。我以为是网络服务?我想我会使用一个本地组,IIS\U WPG。通常,运行辅助进程的任何帐户都应归入此组。如果您因其他原因决定更改帐户,使用群可以保护您。此外,如果您的日志目录位于网站中,请确保您在其上设置了一些保护,这样人们就无法对其进行请求。谢谢您的建议。有什么地方可以让我读一下吗。我对安全性和权限非常陌生。您可能希望尝试IIS文档。(IIS6)或(IIS7)。我已运行filemon并筛选*log。出现的唯一文件是Log4Net的内部调试文件。它没有试图打开或写入所需的日志文件。我已经尝试过了。有几件事让我困惑。我没有log4j配置文件。我正在使用Log4net。这还能用吗?接下来,我使用我的web配置文件来保存我的设置(在dev中工作)。我打开了端口9090,但电锯似乎在监听端口4445和4560。我是否应该将上述内容放在某个文件中,然后再试一次?还有,最后一件事,我看到您将插件指向一个apache类。我必须也下载这些类,还是它们包含在webstart中?只需将第二个xml另存为文件,一旦启动链锯,就可以打开配置文件->如果不要求您选择配置文件,则必须删除用户目录中的“.chainsaw”目录。您不需要log4j配置,只需使用web.config->即可按上述配置添加此appender