Log4net无法写入文件。

12

我想向文件中添加新的日志。这是我的appender:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="mylogfile.txt"/>
  <appendToFile value="true"/>
  <rollingStyle value="Size"/>
  <maxSizeRollBackups value="5"/>
  <maximumFileSize value="10MB"/>
  <staticLogFileName value="true"/>
  <filter type="log4net.Filter.StringMatchFilter">
    <stringToMatch value="test"/>
  </filter>
  <filter type="log4net.Filter.StringMatchFilter">
    <stringToMatch value="error"/>
  </filter>
  <filter type="log4net.Filter.DenyAllFilter"/>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %level %logger - %message%newline%exception"/>
  </layout>
</appender>
<root>
  <level value="All"/>
  <appender-ref ref="RollingFileAppender"/>
</root>

在我的课程中,我添加了

[assembly: XmlConfigurator(Watch = true)]

我为这个文件添加了对所有人的访问权限,但是log4net没有写入文件。为什么?

4个回答

30

当出现问题时,Log4net会默默失败。设计理念是没有日志记录比导致应用程序崩溃更好。要找出问题所在,请通过将此键添加到您的 [app/web].config 文件中来打开Log4net的内部调试:

<appSettings>
  <add key="log4net.Internal.Debug" value="true"/>
</appSettings>

调试消息将被写入控制台或System.Diagnostics.Trace系统。有关更多详细信息,请参见Phill Haack的 http://haacked.com/archive/2006/09/26/Log4Net_Troubleshooting.aspx/

Log4net可能出现任何数量的失败原因。首先是日志文件目录的权限问题(特别适用于服务器进程,在其中您可能会在受限制的安全权限集下运行)。


太棒了!只用两分钟就解决了我卡了一个小时的问题。 - StinkyCat
这对我似乎没有起作用,直到我意识到调试输出到“立即”窗口而不是“输出”窗口。 - JayJay

3
你只需要调用Configure函数即可:
log4net.Config.XmlConfigurator.Configure();

你可以在这里查看更多详细信息: Log4net无法写入日志文件

0

你应该添加这个配置部分:

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

用于引用log4net配置。


0

在你的应用程序中,需要将日志初始化作为第一步,并从具有[assembly]标记的同一程序集中进行:

来自docs:

因此,如果您使用配置属性,则必须调用log4net以允许其读取属性。简单地调用LogManager.GetLogger将导致读取并处理调用程序集上的属性。因此,在应用程序启动期间尽早进行日志记录调用至关重要,特别是在加载和调用任何外部程序集之前。

在你的启动代码中添加类似以下内容:

LogManager.GetLogger("Initialises logging from assembly attributes");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接