【问题标题】:log4net only logs when running in the Visual Studio debuggerlog4net 仅在 Visual Studio 调试器中运行时记录
【发布时间】:2009-04-06 15:39:13
【问题描述】:

我正在运行 Visual Studio 2008 - log4net 日志记录 (v1.2.10) 有问题。 我有一个带有单个日志语句的小型控制台测试程序。 我为 RollingLogFileAppender 和 ConsoleAppender 配置了 log4net。

当我从命令行运行已编译的 exe 时,我看到在我的运行时目录中正确创建了日志文件。日志文件被创建(或附加到,当它存在时),但唯一的输出是配置的 [Header] 和 [Footer]。没有输出到控制台。

但是,当我在调试器下运行时,日志消息会同时出现在日志文件和控制台中。以下是我的 log4net 配置:

<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
  </appender>
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="quicktest-log-" />
    <appendToFile value="true" />
    <immediateFlush value="true" />
    <datepattern value="yyyy-MM-dd" />
    <maxSizeRollBackups value="100" />
    <maximumFileSize value="1048576" />
    <rollingStyle value="Composite" />
    <staticLogFileName value="false" />
    <layout type="log4net.Layout.PatternLayout">
      <header value="[Begin Quicktest program log]&#13;&#10;" />
      <footer value="[End Quicktest program log]&#13;&#10;" />
      <conversionPattern value="%date{HH:mm:ss} [%thread] %-5level %logger: %message%newline" />
    </layout>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="ConsoleAppender" />
    <appender-ref ref="RollingLogFileAppender" />
  </root>
</log4net>

【问题讨论】:

  • +1 让我在回答他自己的问题时笑了

标签: visual-studio log4net


【解决方案1】:

这个理论可能有点牵强,但您是否确保已将 app.config 复制到可执行文件所在的文件夹中? App.config 必须复制到输出可执行文件所在的位置,并且您还必须将其重命名为 .config,因此如果您的可执行文件是 MyProgram.exe,则 config 必须在 MyProgram.exe.config 中。

【讨论】:

  • 感谢您的快速响应和健全性检查...... app.config 得到了正确处理。
【解决方案2】:

它现在正在工作,但谜团仍然存在。显然,一大口中式自助餐是解决此类问题的唯一方法,因为一旦我吃了一个,问题就消失了。

我的测试程序是一个带有

的文件
class Test 
{
    static void Main (string[] args)
    {
       .
       . // some logging attempted here.
       .
    }
}

当我最初遇到问题时,我正在Main() 内进行日志记录。之后,我在 Test 类上创建了一个方法,在 Main 中实例化了 Test 类,并将日志记录移至该方法。这消除了问题:

class Test
{
    static void Main (string[] args)
    {
      var p = new Test();
      p.Go ();
    }
    public void Go ()
    {
       . // some logging here.
    }
}

这还没有定论。我把它移回原来的样子,它开始工作了。所以,我必须得出结论,这个难题的答案是:不要在没有吃太多中国菜的情况下尝试第一次 log4net 测试程序。

【讨论】:

  • 我也有同样的问题——不过我镇上没有中国菜:(
【解决方案3】:

我遇到了同样的问题,我正在执行 clickonce 部署。

我发现我需要在 Project properties > Publish > ApplicationFiles 中添加 log4net.xml 并将这个 log4net.xml 作为数据文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    相关资源
    最近更新 更多