【问题标题】:log4net enabled, but not creating any files启用 log4net,但未创建任何文件
【发布时间】:2015-03-05 20:54:20
【问题描述】:

已经向我展示了如何使用 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);

而且它工作得完美无缺。

现在我让它在一个新的控制台项目中完美运行。然而,我几乎所有的项目都是另一个应用程序的插件,所以我的项目类型是由另一个应用程序(称为 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>

我想要记录的每个类都在类级别声明一个 ILog 实例。 像这样:

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

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

我还需要做其他事情吗?

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

【问题讨论】:

  • 你检查过你的项目名\bin\x86\Debug\logs 目录了吗?

标签: c# dll log4net


【解决方案1】:

在 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 配置不在 app.config 中,它在一个单独的文件中。它似乎在我的控制台项目中没有它。我的 app.config 已复制到输出到始终并构建操作:无。
  • 检查您的 AssemblyInfo.cs 文件中是否有以下代码:[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
  • @Erik83:你可以关注这个link。我点击了相同的链接,它对我来说非常有效
  • 确保您的 log4net.config 文件设置了以下属性:构建操作:内容复制到输出目录:始终复制
  • 我刚刚检查过了。我还确保该文件实际上位于输出文件夹中,并且确实如此。
【解决方案2】:

您似乎尝试了几种不同的方法来配置 log4net。如果其中一个失败,最好的选择是启用 log4net 调试以查看您的记录器是否正在工作/崩溃。在您的 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

【讨论】:

  • 嗯,我在想一种方法来查看 log4net 发生了什么。它不会在正常模式下抛出任何异常或任何东西。这解决了我的问题。谢谢!实际问题是我在插件中加载设置的时间错误,因此主机应用程序在我开始记录信息之前将其删除。
猜你喜欢
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多