logging - 工作 azure 日志记录设置

标签 logging azure log4net trace

我尝试设置跟踪日志记录有一段时间了,但就是无法让它正常工作。关于这个主题有这么多错误/过时的文章并没有帮助。但请有人给我一个良好且实用的设置,用于 Azure (1.6) 的跟踪日志记录和查看

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

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

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

根据 MSDN 文章进行设置(顺便说一句,非常模糊且非常分散)。在ServiceDefinition (128Mb) 中定义LocalStorage 元素。在角色启动时添加目录日志传输。去。这似乎有效。直到一段时间后,该角色在重新启动期间自行崩溃,并显示“OverallQuota”消息不够大,并且该角色刚刚死亡并拒绝出现。即使在 4080Mb 内也有如此多的可用空间,这根本没有意义。

关于增加配额的文章再次出现,但这些似乎让事情变得更糟。在 ServiceDefinition 中将 DiagnosticStore 大小设置为 8Gb。不起作用。仍然会失败,只是数字更高。将OverallQuota 设置为等于8Gb 也没有帮助。由于某种原因,在干净的镜像上安装可以正常工作,但是当重新启动或更新时,它决定以不同的方式计算配额。无论 DiagnosticsStore 的大小如何,“计算”的值始终为 OverallQuota + Log4Net LocalStorage。我所做的一切似乎都无法改变这一点。非常令人沮丧,因为它似乎有效,但不久之后就死了。

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

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

最佳答案

我们也在 Azure 上使用 Log4Net

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

如何设置...很简单。

在 Global.asax 中按照通常的方式配置 log4net

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 小时,效果就像炸弹一样

关于logging - 工作 azure 日志记录设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9249797/

相关文章:

asp.net - log4net不在日志文件中写入日志

logging - 自定义 NLog LogLevels 还是每个类有多个记录器?

c# - 无需访问 Internet 的桌面客户端应用程序中的 Azure Application Insights

MongoDB 日志文件

azure - 为什么 Azure 托管标识显示为无效资源 ID

使用 varchar (max) 的 Sql select 查询花费太多时间

c# - 如何在 ASP.NET 中记录客户端 IP 地址和机器名称

c#-4.0 - log4net 不会在 Windows 7 上创建日志文件

c# - Windows 窗体事件日志

logging - 分析log4net日志的工具