已启用 log4net,但未创建任何文件

log4net enabled, but not creating any files

我已经了解了如何使用 log4net 并获得了要使用的配置文件。我丢失了这个配置文件,现在我无法让它工作。出于某种原因,配置它的人在 app.config 中有配置信息时无法让它工作,所以他将它放在输出文件夹中的 log4net.config 中。

然后他在程序启动时调用了这个:

        var logConfig = Path.Combine(Path.GetDirectoryName(typeof(App).Assembly.Location), "log4net.config");
        var configStream = new FileInfo(logConfig);
          log4net.Config.XmlConfigurator.Configure(configStream);

而且它运行得非常完美。

现在我让它在新的控制台项目中完美运行。然而,我几乎所有的项目都是另一个应用程序的插件,所以我的项目类型是 class 由这个其他应用程序(称为 Revit)加载的库。

无论如何,我知道我可以登录,但就是无法正常工作... 这是我使用的log4net.config:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <file value="logs\" />
    <datePattern value="dd.MM.yyyy'.log'" />
    <staticLogFileName value="false" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="5MB" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="RollingFileAppender"/>
  </root>
</log4net>

我想从中记录内容的每个 class 都在 class 级别上声明了一个 ILog 实例。 像这样:

static private ILog _logger = LogManager.GetLogger(typeof(Program));

ILog 实例报告已启用所有日志记录(调试等),但未创建任何文件。

我还需要做其他事情吗?

我快疯了! 感谢您的帮助!

在 App.config 文件中,您应该添加此代码以注册 log4net 部分处理程序并生成日志

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

或检查您的 AssemblyInfo.cs 文件是否有此代码:

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

您似乎尝试了几种不同的方法来配置 log4net。如果失败,最好的选择是启用 log4net 调试以查看您的记录器是否 working/crashed。在你的 app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>

...

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

Log4net FAQ