6

我无法使用 log4net 写入日志任何信息、错误、调试,我尝试了一切为网络服务提供权限的方法,每个人都可以访问目录 asp.net 临时文件夹、日志文件夹,甚至 c:\,

它只是创建一个空文件。但不写日志

可能是什么问题

谢谢拉吉

4

3 回答 3

9

我的猜测是在您的配置文件中,您没有指定布局模式。通常,您的 appender 中有如下所示的内容:

<layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>

这指定了要写入日志的内容。如果你没有那个,我怀疑它会写任何东西。

我同意评论中那些说这可能不是权限问题,因为文件已创建。为了测试这是真的,你可以在你的配置中添加一个 appender 来输出到控制台。然后,您可以在调试应用程序时观察输出。如果这也不起作用,您就知道问题不是权限问题。

我能给出的最佳建议是将您的配置文件与工作文件进行比较。确保每个部分在工作配置中都有对应的部分,或者您知道为什么它不需要有对应部分。这是我在 log4net 上写的一篇文章,其中包括对配置每个部分的解释,并展示了如何编写它们:

http://www.codeproject.com/KB/dotnet/Log4net_Tutorial.aspx

如果所有这些都没有帮助,请在您的问题中发布您的配置文件文本,以便我们查看它。

于 2011-06-21T15:50:05.313 回答
2

此问题的一个可能原因可能是Logging Level。检查日志记录级别是否设置为 FATAL,如果是这种情况,请尝试替换 web.config 的这一部分:

 <log4net>
         .....
         <root>
              <level value="FATAL" /> 
              <appender-ref ref="RollingFileAppender" />
            </root>
         .....
    </log4net>

有了这个:

<log4net>
    ......
    <root>
         <level value="DEBUG" /> 
           <appender-ref ref="RollingFileAppender" />
       </root>
    ....
</log4net>

此外,不要忘记在 web.config 部分中检查一些最终发生的情况

 <filter type="log4net.Filter.StringMatchFilter">
    <stringToMatch value="test" />
  </filter>

小节。在这种情况下,即使日志记录级别设置为 DEBUG(例如)并且您在代码中输入了如下内容:

log.Debug("Db quering...");

它总是返回空白,但如果你写例如:

log.Debug("test: Db quering...");

因此尝试注释掉过滤器部分和这一行

  <filter type="log4net.Filter.DenyAllFilter" />

最后你应该得到它的工作!

希望这可以帮助

于 2014-02-16T18:36:28.137 回答
0

如果您使用自己的 PatternLayout,请参阅配置文件中的模式类命名空间:

<layout type="My.PatternClass.Namespace.MyPatternLayout">
    ...
</layout>
于 2018-10-07T19:46:23.480 回答