c# – Log4Net正在创建文件但不写入文件

最近我有一个问题使Log4Net工作(described here)但在那之后它没关系.

我已经离开了这一段时间,因为我需要开发一些模块,我让日志记录稍微落后了.现在,我看,我甚至尝试更改日志文件的名称和位置(静态设置),它创建它,但在两种情况下都没有写任何东西.

这是我的log4Net配置文件:

<?xml version="1.0"?>
<configuration>    

<log4net>
<root>
 <level value="ALL" />
 <appender-ref ref="console" />
 <appender-ref ref="file" />
</root>
<appender name="console" type="log4net.Appender.ConsoleAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %level %logger - %message%newline" />
  </layout>
</appender>
<appender name="file" type="log4net.Appender.RollingFileAppender">
 <file value="ApplicationLogging.log" />
 <appendToFile value="true" />
 <rollingStyle value="Size" />
 <maxSizeRollBackups value="5" />
 <maximumFileSize value="10MB" />
 <staticLogFileName value="true" />
 <layout type="log4net.Layout.PatternLayout">
 <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
 </layout>
</appender>
</log4net>
</configuration>

这是我的Global.asax

[assembly: XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

 XmlConfigurator.Configure();            
 ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 logger.Info("Application started.");

我是如何声明的:

 readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

我有时会像这样使用它:

logger.Info("some logging here");

或者对于Context记录,我会像这样使用它:

context.Database.Log = (dbLog => logger.Debug(dbLog));

该文件已创建,但未向其写入任何内容.
任何人都可以建议我在哪里或寻找什么?

更新:
正如stuartd所建议的那样,我在web.config中添加了这个:

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

<system.diagnostics>
 <trace autoflush="true">
  <listeners>
    <add
        name="textWriterTraceListener"
        type="System.Diagnostics.TextWriterTraceListener"
        initializeData="C:\log4net.txt" />
  </listeners>
 </trace>
</system.diagnostics>

Which writes the following content (pastebin)

请注意,我删除了之前没有看过的第一部分,我认为它是多余的?

<!--<appender name="console" type="log4net.Appender.ConsoleAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %level %logger - %message%newline" />
  </layout>
</appender>-->

无论是否使用它都不起作用.

Here is the output第一部分未注释掉(原始状态)

我也尝试了以下内容:
https://logging.apache.org/log4net/release/config-examples.html
https://csharp.today/log4net-tutorial-great-library-for-logging/

我不知道为什么它可以创建它但不写入它…
我似乎无法在网上找到任何内容,所有问题都与文件的创建有关,而不是写入文件.

解决方法:

1用于在您的问题中包含调试/跟踪日志.
消息log4net:配置存储库[log4net-default-repository]在此日志中多次出现,看起来配置正在设置两次,一次是通过XmlConfiguratorAttribute,另一次是通过调用XmlConfigurator.Configure();.

检查XmlConfiguratorAttribute的源代码显示它在内部对XmlConfigurator.Configure(…)进行类似的调用;

private void ConfigureFromFile(ILoggerRepository targetRepository, FileInfo configFile)
{
    if (m_configureAndWatch)
    {
        XmlConfigurator.ConfigureAndWatch(targetRepository, configFile);
    }
    else
    {
        XmlConfigurator.Configure(targetRepository, configFile);
    }
}

这就是发生的事情.

XmlConfiguratorAttribute最初设置log4net.config文件中定义的记录器和追加器,并创建空的ApplicationLogging.log文件.

然后调用XmlConfigurator.Configure();使用web.config(作为默认位置)中的配置覆盖这些记录器和appender,因为您使用单独的log4net.config文件,所以不包含任何内容.
因此,您最终没有任何Appender,也没有任何记录.

解决方案是应用XmlConfiguratorAttribute或使用log4net.configfile(XmlConfigurator.Configure(new FileInfo(“log4net.config”)))的路径调用XmlConfigurator.Configure(),但不要同时执行这两个操作.

上一篇:mysql – 使用log4net存储日志信息


下一篇:Log4Net 用法记录