Logging 工作azure日志记录设置

Logging 工作azure日志记录设置,logging,azure,log4net,trace,Logging,Azure,Log4net,Trace,我尝试设置跟踪日志记录已经有一段时间了,但我无法让它正常工作。他们在这个话题上有那么多错误/过时的文章,这对他们没有帮助。但是,有人能给我一个好的,实用的Azure(1.6)跟踪日志记录和查看设置吗 我想做的就是能够从我的应用程序中捕获和查看跟踪消息 我从标准DiagnosticMonitorRaceListener开始,但最终进入了表存储。我一辈子都搞不懂如何与表存储中的日志交互。在VisualStudio中,我可以“查看”它,但使用它非常麻烦,实际上毫无用处。没有排序,必须编写繁琐的日期过滤

我尝试设置跟踪日志记录已经有一段时间了,但我无法让它正常工作。他们在这个话题上有那么多错误/过时的文章,这对他们没有帮助。但是,有人能给我一个好的,实用的Azure(1.6)跟踪日志记录和查看设置吗

我想做的就是能够从我的应用程序中捕获和查看跟踪消息

我从标准DiagnosticMonitorRaceListener开始,但最终进入了表存储。我一辈子都搞不懂如何与表存储中的日志交互。在VisualStudio中,我可以“查看”它,但使用它非常麻烦,实际上毫无用处。没有排序,必须编写繁琐的日期过滤器,其中一半时间不起作用

定制日志似乎是一条出路。我在log4net上做了很多工作,所以我选择了那个。您可以将log4net重定向到trace,但最终会得到同样糟糕的表存储。它是自定义日志文件。现在我已经不知道这是否得到支持。有些文章提到诊断文件锁会导致各种问题。不确定这是否仍然是一个问题,不管这有多奇怪,为什么在无法读取/写入日志时提供自定义日志传输功能?!无论如何,我在写日志时没有遇到任何问题(我已经注意到)

设置是根据MSDN文章(非常模糊和非常分散的btw)。在ServiceDefinition中定义LocalStorage元素(128Mb)。在角色启动中添加目录日志传输。去吧。这似乎奏效了。直到过了一段时间,角色在重新启动时出现了一个整体配额不够大的消息,角色就死了,拒绝出现。即使在4080Mb内存中也有很多可用空间,这根本没有意义

随后又有关于增加配额的文章,但这些文章似乎让事情变得更糟。在ServiceDefinition中将DiagnosticStore大小设置为8Gb。不起作用。还是很糟糕,只是数字越高。将总配额设置为等于8Gb也无济于事。出于某种原因,在干净映像上安装可以正常工作,但当重新启动或更新时,它决定以不同的方式计算配额。无论DiagnosticsStore的大小如何,“计算”值始终为OverallQuota+Log4Net LocalStorage。我所做的一切似乎都无法改变这一点。非常令人沮丧,因为它似乎起了作用,只是过了一段时间才死去

我也尝试过diagnostics.wadcfg,但无法让Azure获取它们。我确保它们被复制到根输出文件夹,并从我的代码中删除对监视器的任何更改。娜达,齐普。。。检查了我在实例上找到的所有日志文件。任何地方都没有提及或错误


为什么这对Azure如此困难?跟踪日志是任何应用程序最基本的日志记录工具。这真的在扼杀Azure体验

我们正在Azure上成功地使用log4net quiet,但是我们正在将数据转储到Azure表存储中。
这绝对是一个更具可扩展性的解决方案。我强烈建议您为Cerburata(现在是RedGates)购买许可证,以减轻处理Azure表存储的痛苦,并减轻查看跟踪日志的痛苦。

对于存在大量日志数据的场景,我们已尝试将数据定向到Blob中-部分使用,以及将我们需要处理的关键信息发送到表存储。我们既使用AzureStorageTraceListener,也创建了一个自定义TraceListener,将数据定向到我们自己的Azure表,因为OOB模式不符合我们的要求。由于WADLogsTable可以快速增长,我们需要一种在完成删除/重新创建表时不产生巨大存储成本或离线跟踪的方式来修剪它,因此我们使用自定义表,它每个月创建一个不同的表

兰吉思

我们也在Azure上使用Log4Net

小警告,当每个实例运行多个角色时,我只能让一个角色[main role]实际成功地写入日志。。。[不好!!!]

如何设置它。。。很容易

在Global.asax中,按照常规配置log4net

protected void Application_Start()
{
    log4net.Config.XmlConfigurator.Configure();
}
在您的角色入口点。。。同时运行配置。F#*^知道为什么,但如果你不在两个地方都这样做,它就不会起作用(无论如何,在我的情况下不会)

然后在您的配置文件中

<log4net>
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>
    <root>
        <level value="ALL" />
        <appender-ref ref="TraceAppender" />
    </root>
</log4net>

确保已启用Azure跟踪

<system.diagnostics>
     <trace>
          <listeners>
              <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
                  <filter type="" />
             </add>
          </listeners>
     </trace>


我们选择不使用Storage Studio的原因是,任何来自Azure的数据都需要您付费。。。Azure中的数据事务是免费的,连接到表存储非常简单,所以我们构建了一个屏幕来显示日志,花了2/3个小时,就像炸弹一样工作

我使用自定义日志将所有站点的日志数据写入Azure表存储。然而,正如您正确地指出的,从表中检索数据是一件棘手的事情。因此,我也有一个本地内部使用的网站在我们的经营场所运行,它从Azure表检索数据并将其存储在本地数据库中。虽然您确实需要支付从Azure系统传输数据的费用,但成本微乎其微。我们所有网站的日志解决方案每月花费不到1英镑


将数据移动到本地数据库意味着它比保存在Azure系统中更容易查询。我保留了一个讨论,其中讨论了上述许多问题,并提供了代码示例的链接。

感谢您的建议。我试过了,它实际上并不比VS.NET工具好多少。排序只适用于页面级别(愚蠢!),而且您仍然无法轻松筛选日期。之所以必须对其进行两次初始化,是因为角色入口点和网站实际上在不同的进程中运行。
<system.diagnostics>
     <trace>
          <listeners>
              <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
                  <filter type="" />
             </add>
          </listeners>
     </trace>