Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Log4Net正在创建文件,但未写入该文件_C#_Entity Framework 6_Log4net_Log4net Configuration_Audit Logging - Fatal编程技术网

C# Log4Net正在创建文件,但未写入该文件

C# Log4Net正在创建文件,但未写入该文件,c#,entity-framework-6,log4net,log4net-configuration,audit-logging,C#,Entity Framework 6,Log4net,Log4net Configuration,Audit Logging,最近我遇到了一个让Log4Net工作()的问题,但在那之后就没问题了 由于我需要开发一些模块,日志记录也有点落后,所以我已经把它放在后面一段时间了。现在我看到了,我甚至尝试更改日志文件的名称和位置(静态设置),它正在创建日志文件,但在这两种情况下都没有写入任何内容 这是我的log4Net配置文件: readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().Declari

最近我遇到了一个让Log4Net工作()的问题,但在那之后就没问题了

由于我需要开发一些模块,日志记录也有点落后,所以我已经把它放在后面一段时间了。现在我看到了,我甚至尝试更改日志文件的名称和位置(静态设置),它正在创建日志文件,但在这两种情况下都没有写入任何内容

这是我的log4Net配置文件:

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

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

请注意,我已经删除了我以前没有看到的第一部分,我认为它是多余的

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

请检查您的应用程序是否对日志文件的目标文件夹具有写入权限,
这种事情有时会导致真正的痛苦


除此之外,其他一切看起来都很好。

+1感谢您在问题中加入调试/跟踪日志。
消息
log4net:Configuring Repository[log4net default Repository]
多次出现在此日志中,看起来配置设置了两次,一次是通过
XmlConfigurator属性设置的,第二次是通过调用
XmlConfigurator.Configure()

检查
XmlConfiguratorAttribute
的源代码发现,它在内部对
XmlConfigurator.Configure(…)进行了类似的调用

事情就是这样

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

然后调用
XmlConfigurator.Configure()
使用
web.config
(默认位置)中的配置覆盖这些记录器和附加器,该配置不包含任何内容,因为您正在使用单独的
log4net.config
文件。
因此,您最终没有任何
追加器
,并且不会记录任何内容


解决方案是应用
XmlConfiguratorAttribute
或调用
XmlConfigurator.Configure()
以及
log4net.config
文件的路径(
XmlConfigurator.Configure(新文件信息(“log4net.config”)
),但是不要同时做这两件事,它是登录到控制台的吗?不是,因为我没有任何控制台,它是一个MVC web应用程序。那么为什么你有一个控制台附加器呢?为什么在log4net配置文件中有一个
部分?无论如何,我建议您看看它报告了什么。我不知道这是否与您的问题有关,但您正在将RollingFile属性设置为size,这意味着您希望在旧文件变重时拥有新文件。第
行表示只有一个文件将用于日志记录。这可能会让你以后有点头疼,即使它没有引起这个问题。奇怪的是,在调试/跟踪日志中多次看到
配置存储库[log4net default repository]
;就像配置了两次一样。能否删除
XmlConfigurator.Configure()。还要添加
,以确保立即刷新内部缓冲区。这不是答案,应该是注释。@Barr J,我确信我的应用程序拥有目标文件夹的权限,以确保我已将路径设置为与“log4net.internal.Debug”相同的目录,该目录正在正确创建和写入(如stuartd所建议)。更改路径、名称或扩展也没有帮助。使用web.config.original post updated中添加的配置设置更新原始post。我试着删除控制台appender的ref以及部分,只留下file部分和ref,但我的文件中仍然没有任何内容…@BarrJ,也不起作用。调试时,我查看了Appender对象本身,这就是我得到的:。计数不应该大于0吗?非常感谢您提供了解释清楚的解决方案!这完全有道理,但老实说,我不会想到这一点。也谢谢你stuartd,因为你,我能够介绍“调试/跟踪日志”,它最终给出了答案!我喜欢stackoverflow及其用户:)
context.Database.Log = (dbLog => logger.Debug(dbLog));
<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>
<!--<appender name="console" type="log4net.Appender.ConsoleAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %level %logger - %message%newline" />
  </layout>
</appender>-->
private void ConfigureFromFile(ILoggerRepository targetRepository, FileInfo configFile)
{
    if (m_configureAndWatch)
    {
        XmlConfigurator.ConfigureAndWatch(targetRepository, configFile);
    }
    else
    {
        XmlConfigurator.Configure(targetRepository, configFile);
    }
}