为什么Log4Net没有在生产中创建日志文件?

时间:2009-08-22 14:01:01

标签: asp.net log4net

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

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

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

我认为这是Web部署项目导致一些问题的地方。 global.asax是否被编译到单个DLL中?当我在部署目录中进行构建时,我看到了一个global.compiled文件。这必须进入生产中的bin文件夹吗?或者是单个DLL中的global.asax代码?同时在bin文件夹或DLL中都没有改变任何内容。

9 个答案:

答案 0 :(得分:7)

工作进程是否具有足够的权限来写入日志目录?我猜不是这样的。您可能希望赋予工作进程组权限以写入该目录,并查看是否可以解决您的问题。

答案 1 :(得分:4)

在AssemblyInfo.cs文件中添加它并检查

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

答案 2 :(得分:3)

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

答案 3 :(得分:2)

看起来问题的根源是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

上述链接中还包含其他一些可能性。

希望这有帮助

西拉

答案 4 :(得分:1)

之前发生过这种情况,并且是ASPNET用户在需要时创建文件的权限。可以检查Windows事件日志中是否有任何内容指示这个?

要检查事物的类型(我们观察观察者!),我们通过使用OutputDebugString() via pinvoke.写出来输出log4net将要工作的地方。我们还将此设置为try catch以确保我们发现有关此问题的错误,因为使用它能够正确记录非常重要。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

确保正确配置log4net。也许dll没问题但配置文件丢失了? log4net可能存在但只是没有任何活动的appender。

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

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