2017-02-03 115 views
5

我有一些工作者角色项目,我想利用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的例子,但结果是一样的

+0

您试图查看日志的地方?它们在Visual Studio输出窗口中不可见。您需要连接到存储帐户,然后查看表格“WADLogsTable” –

+0

每个我读过的博客,traceappender应在日志记录时写入输出窗口:http://interactivelogic.net/wp/2010/02/aspnet -logging-to-output-window-with-log4net/ –

+0

如果这不是用于写入输出日志的正确的log4net appender,请告诉我,我会使用任何东西。我想确保在将项目上传到azure之前将正确的东西写入日志中 –

回答

-1

我才得以实现。

创建一个具有工作角色的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 

enter image description here

我想你可能在你的代码中缺少的部分可能是配置log4net的在OnStart。当我从OnStart方法中删除log4net.Config.XmlConfigurator.Configure();行时,它停止在输出窗口中显示来自log4net的条目。

+0

TraceAppender已经写入输出窗口的原因是我为什么要减少配置中的复杂度。当我使用microsoft构建的跟踪工具时,会在输出窗口中显示详细信息。在我的理解中,Log4net的AzureTraceAppender只是传递给诊断系统,所以它应该自动出现在输出窗口中。 log4net的AzureTraceAppender刚刚破解。 –

+0

我想我按照你想要的方式工作。给我一些时间我会更新我的答案。 –

+0

我更新了我的答案。这应该可以帮助您解决问题。 –

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调试。请参阅internal debugging on this log4net faq page。标准它应该登录到您已配置的侦听器。将autoflush =“true”选项添加到跟踪元素。或者查找您可以写入的工作者角色的目录并访问以读取日志。

+0

感谢彼得,我会尝试使用ImmediateFlush来查看输出是否到达输出窗口 –

+0

我已经将XmlConfigurator添加到了assemblyinfo,并且包含了immediateFlush,但是没有骰子,仍然不起作用。我已经删除了log4net,现在正在使用直接运行的诊断工具。 –