WorkerRole log4net Trace appender记录的日志未出现在输出窗口中。

5
我有一些Worker Role项目,想要利用log4net功能记录信息。不幸的是,我的日志没有出现在输出窗口中。
我在调试器中跨过一个日志行,输出窗口却显示了以下内容:
'WaWorkerHost.exe' (CLR v4.0.30319: RdRuntime): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Caching\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Runtime.Caching.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
由于这是我的代码,所以我很困惑为什么会看到这个异常。下面是我的日志app.config设置:
 <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="Montetary.Agents.HappyBirthday.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <system.diagnostics>
    <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
          <filter type="" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>
  <log4net>
    <appender name="AzureTraceAppender" type="log4net.Appender.TraceAppender">
      <layout type="log4net.Layout.PatternLayout">
        <!-- can be any pattern you like -->
        <conversionPattern value="%logger - %message" />
      </layout>
    </appender>
    <!-- does not have to be at the root level -->
    <root>
      <level value="ALL" />
      <appender-ref ref="AzureTraceAppender" />
    </root>
  </log4net>

我尝试按照这个问题中的示例操作,但结果相同。


你想在哪里查看日志?它们不会显示在Visual Studio输出窗口中。你需要连接到存储帐户并查看"WADLogsTable"表。 - Chetan
根据我阅读的许多博客,traceappender 应该在记录日志时写入输出窗口:http://interactivelogic.net/wp/2010/02/aspnet-logging-to-output-window-with-log4net/。 - Nathan Tregillus
如果这不是正确的log4net appender来写入输出日志,请告诉我,我会使用任何东西。在上传我的项目到Azure之前,我想确保我将正确的内容写入日志中。 - Nathan Tregillus
如果您希望将日志写入输出窗口,则需要在配置文件中禁用诊断配置。您可以注释掉整个 <system.diagnostics> 部分,然后尝试。 - Chetan
更新 我放弃了log4net,改用诊断框架。 - Nathan Tregillus
1个回答

1

以下是您可以检查的几个事项:

在写入日志文件之前是否调用了log4net配置(仅需一次):

log4net.Config.XmlConfigurator();

下一步是将刷新功能添加到您的配置中:
<appender name="AzureTraceAppender" type="log4net.Appender.TraceAppender">
  <param name="ImmediateFlush" value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <!-- can be any pattern you like -->
    <conversionPattern value="%logger - %message" />
  </layout>
</appender>

这将立即刷新消息。

请确保已将Azure诊断配置为提供所有调试信息。

然后,您可以启用内部log4net调试。请参见此log4net faq页面上的内部调试。默认情况下,它应记录到您已配置的侦听器。将autoflush="true"选项添加到trace元素中。或者找到可以写入并访问以读取日志的worker role上的目录。


谢谢Peter,我会尝试使用ImmediateFlush来查看输出是否进入输出窗口。 - Nathan Tregillus
我已经将XmlConfigurator添加到assemblyinfo中,并包含了immediateFlush,但是没有用,仍然无法工作。我已经删除了log4net,现在直接使用诊断工具,这是有效的。 - Nathan Tregillus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接