Logging 工作azure日志记录设置
我尝试设置跟踪日志记录已经有一段时间了,但我无法让它正常工作。他们在这个话题上有那么多错误/过时的文章,这对他们没有帮助。但是,有人能给我一个好的,实用的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获取它们。我确保它们被复制到根输出文件夹,并从我的代码中删除对监视器的任何更改。娜达,齐普。。。检查了我在实例上找到的所有日志文件。任何地方都没有提及或错误Logging 工作azure日志记录设置,logging,azure,log4net,trace,Logging,Azure,Log4net,Trace,我尝试设置跟踪日志记录已经有一段时间了,但我无法让它正常工作。他们在这个话题上有那么多错误/过时的文章,这对他们没有帮助。但是,有人能给我一个好的,实用的Azure(1.6)跟踪日志记录和查看设置吗 我想做的就是能够从我的应用程序中捕获和查看跟踪消息 我从标准DiagnosticMonitorRaceListener开始,但最终进入了表存储。我一辈子都搞不懂如何与表存储中的日志交互。在VisualStudio中,我可以“查看”它,但使用它非常麻烦,实际上毫无用处。没有排序,必须编写繁琐的日期过滤
为什么这对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>