工作天蓝色日志设置

时间:2012-02-12 15:04:35

标签: logging azure log4net tracing

我一直试图设置跟踪日志记录一段时间,但我根本无法让它正常工作。关于这个主题,它们没有太多错误/过时的文章。但请有人能给我一个良好而实用的跟踪记录设置。查看Azure(1.6)

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

我从标准的DiagnosticMonitorTraceListener开始,但最终会在表存储中结束。我不能为我的生活弄清楚我应该如何与表存储中的日志进行交互。在Visual Studio中,我可以“查看”它,但使用它非常麻烦,实际上没用。没有排序,必须编写繁琐的日期过滤器,其中一半的时间不起作用。

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

设置是根据MSDN文章(额外模糊和非常分散btw)。在ServiceDefinition(128Mb)中定义LocalStorage元素。在角色启动中添加目录日志传输。走。这似乎有效。直到一段时间之后,角色在重启期间陷入困境,而且还没有足够大的消息,角色就会消失而且拒绝出现。即使在4080Mb内也有太多可用空间,这根本没有意义。

再次关注增加配额的文章,但这些似乎更糟糕。在ServiceDefinition中将DiagnosticStore大小设置为8Gb。不行。仍然疯狂,只有更高的数字。将OverallQuota设置为等于8Gb也无济于事。出于某种原因,在干净的图像上安装工作正常,但是当重新启动或更新时,它决定以不同方式计算配额。无论DiagnosticsStore的大小如何,“计算”值始终为OverallQuota + Log4Net LocalStorage。我所做的一切似乎都没有改变。非常令人沮丧,因为它似乎有效,但后来才会死。

我也尝试过diagnostics.wadcfg,但无法让Azure接收它们。我确保将它们复制到根输出文件夹,并从我的代码中删除对监视器的任何更改。 Nada,zip ...浏览了我在实例上可以找到的所有日志文件。在任何地方都没有一个提及或错误。

为什么Azure上这么难?跟踪日志是任何应用程序的最基本的日志记录工具。这实际上是在破坏Azure体验。

4 个答案:

答案 0 :(得分:3)

我们也在Azure上使用Log4Net

次要警告,当每个实例运行多个角色时,我只能获得一个角色[主角色]才能真正成功写入日志... [不好!!!]

如何设置......简单易用。

按照通常的配置log4net

在Global.asax中

protected void Application_Start()
{
    log4net.Config.XmlConfigurator.Configure();
}

在您的角色入口点...也运行配置。 F#* ^知道原因,但是如果你不在两个地方都这样做,那就不行了(不管怎么说都不是这样)

public override void Run()
{
    log4net.Config.XmlConfigurator.Configure();
}

然后在配置文件中

<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小时像炸弹一样工作

答案 1 :(得分:2)

我们正在使用Azure成功安装log4net,但我们正在将数据转储到Azure表存储中。 它绝对是一个更具规模的解决方案。我强烈建议您购买Cerebrata(现在的RedGates)Storage Studio的许可证,以减轻处理Azure表存储及其Diagnostics Manager的痛苦,以减轻查看跟踪日志的痛苦。

答案 2 :(得分:2)

对于存在大量日志数据的情况,我们尝试将数据导入Blob - 部分使用using EtwTraceListener,并将需要对表存储执行的关键信息发送到表存储。我们使用AzureStorageTraceListener以及创建自定义TraceListener,将数据定向到我们自己的Azure表 - 因为OOB模式不符合我们的要求。因为WADLogsTable可以快速增长,我们需要一种方法来修剪它而不会产生巨大的存储Txn成本或者在我们完成删除/重新创建表时使跟踪脱机,我们使用自定义表格为每个月创建一个不同的表格。

兰芝斯
http://www/opstera.com

答案 3 :(得分:1)

我使用自定义日志记录将日志数据写入所有网站的Azure表存储。但是,正如您正确地指出的那样,从表中检索数据是一个尴尬的问题。因此,我还在我们的场所运行一个本地内部使用网站,该网站从Azure表中检索数据并将其存储在本地数据库中。虽然您支付的费用是从Azure系统传输数据,但成本微乎其微。我们所有网站的日志记录解决方案每月花费不到1英镑。

将数据移入本地数据库意味着它比将其保留在Azure系统中更具可查询性。我对Azure logging进行了讨论,讨论了上述许多问题,并提供了代码示例的链接。