WorkerRole log4net跟踪appender日志不出现在输出窗口
我有一些工作者角色项目,我想利用log4net功能来记录信息。不幸的是,我的日志实际上并没有出现在我的输出窗口中。WorkerRole log4net跟踪appender日志不出现在输出窗口
我跨过在调试器日志行,并且输出窗口吐出下面的行来代替:
'WaWorkerHost.exe'(CLR v4.0.30319:RdRuntime):加载 “C: \ Windows \ Microsoft.Net \组件\ GAC_MSIL \ System.Runtime.Caching \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System.Runtime.Caching.dll”。 跳过加载符号。模块已经过优化,调试器选项 “Just My Code”已启用。
看到这是我的代码,我很困惑为什么我看到这个异常。下面是我记录的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>
我试图按照此question的例子,但结果是一样的
我才得以实现。
创建一个具有工作角色的Azure服务(目标框架:.NET Framework 4.5.2),并将log4net
版本2.0.7
添加到工作者角色。
在app.config中添加了log4net的以下部分配置。
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
and log4net
section look as following。
<log4net>
<appender name="AzureTraceAppender" type="log4net.Appender.TraceAppender">
<layout type="log4net.Layout.PatternLayout">
<!-- can be any pattern you like -->
<conversionPattern value="%logger - %message%newline"/>
</layout>
</appender>
<!-- does not have to be at the root level -->
<root>
<level value="ALL"/>
<appender-ref ref="AzureTraceAppender"/>
</root>
</log4net>
到目前为止我所做的是完全一样的,你在你的配置文件已经配置。
在WorkerRole.cs的OnStart
方法
log4net.Config.XmlConfigurator.Configure();
在WorkerRole.c在类级别以下创建辅助角色记录的第一行
配置log4net的
private readonly ILog logger = LogManager.GetLogger("WorkerRole");
试图在记录信息OnStart,OnStop,Run和RunAsync方法。
//In OnStart
logger.Info("From log4net : WorkerRole1 has been started");
//In OnStop
logger.Info("From log4net : WorkerRole1 has stopped");
//In Run
logger.Info("WorkerRole1 is running");
//In RunAsync
logger.Info("From log4net : Working");
运行WorkerRole指向Development Storate帐户,在输出窗口中显示日志条目,如下所示。为区分跟踪写入的条目,我在条目前加上了“From log4net:”。
WorkerRole: WorkerRole - From log4net : WorkerRole1 has been started
WaWorkerHost.exe Information: 0 : From log4net : WorkerRole1 is running
WorkerRole: WorkerRole - From log4net : Working
我想你可能在你的代码中缺少的部分可能是配置log4net的在OnStart
。当我从OnStart
方法中删除log4net.Config.XmlConfigurator.Configure();
行时,它停止在输出窗口中显示来自log4net的条目。
TraceAppender已经写入输出窗口的原因是我为什么要减少配置中的复杂度。当我使用microsoft构建的跟踪工具时,会在输出窗口中显示详细信息。在我的理解中,Log4net的AzureTraceAppender只是传递给诊断系统,所以它应该自动出现在输出窗口中。 log4net的AzureTraceAppender刚刚破解。 –
我想我按照你想要的方式工作。给我一些时间我会更新我的答案。 –
我更新了我的答案。这应该可以帮助您解决问题。 –
有一些东西,你可以检查:
你叫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调试。请参阅internal debugging on this log4net faq page。标准它应该登录到您已配置的侦听器。将autoflush =“true”选项添加到跟踪元素。或者查找您可以写入的工作者角色的目录并访问以读取日志。
感谢彼得,我会尝试使用ImmediateFlush来查看输出是否到达输出窗口 –
我已经将XmlConfigurator添加到了assemblyinfo,并且包含了immediateFlush,但是没有骰子,仍然不起作用。我已经删除了log4net,现在正在使用直接运行的诊断工具。 –
您试图查看日志的地方?它们在Visual Studio输出窗口中不可见。您需要连接到存储帐户,然后查看表格“WADLogsTable” –
每个我读过的博客,traceappender应在日志记录时写入输出窗口:http://interactivelogic.net/wp/2010/02/aspnet -logging-to-output-window-with-log4net/ –
如果这不是用于写入输出日志的正确的log4net appender,请告诉我,我会使用任何东西。我想确保在将项目上传到azure之前将正确的东西写入日志中 –