我已启用针对我正在尝试的Azure网站的Blob存储的诊断日志记录。我还设置Nlog写入Trace
,然后将它们写入Azure blob。 Nlog布局设置为CSV。这是有效的,生成的日志输出到blob存储器。如果这是记录到传统文件,那么该文件将是一个CSV文件,我可以在excel中打开,以便更好地分析日志文件。
下面复制的Nlog配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!--
See http://nlog-project.org/wiki/Configuration_file
for information on customizing logging rules and outputs.
-->
<targets>
<!-- add your targets here -->
<!--
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
-->
<target xsi:type="Trace" name="trace" >
<layout xsi:type="CsvLayout" >
<column name="shortdate" layout="${shortdate}" />
<column name="time" layout="${time}" />
<column name="logger" layout="${logger}"/>
<column name="level" layout="${level}"/>
<column name="machinename" layout="${machinename}"/>
<column name="processid" layout="${processid}"/>
<column name="threadid" layout="${threadid}"/>
<column name="threadname" layout="${threadname}"/>
<column name="message" layout="${message}" />
<column name="exception" layout="${exception:format=tostring}" />
</layout>
</target>
</targets>
<rules>
<!-- add your logging rules here -->
<logger name="*" minlevel="Trace" writeTo="trace" />
<!--
<logger name="*" minlevel="Trace" writeTo="f" />
-->
</rules>
</nlog>
Windows Azure诊断程序将诊断信息保存为blob存储中的CSV文件。 CSV文件包含以下列。
date,level,applicationName,instanceId,eventTickCount,eventId,pid,tid,message,activityId
但是,整个NLog消息都写在Message
列中。这可能是因为它在那里保存了Diagnostics.Trace
消息,其中NLog正在保存它的口号。例如:
2014-05-07T12:18:49,Information,KarlCassarTestAzure1,10cd67,635350619297036217,0,2984,1,"2014-05-07,12:18:49.6254,TestAzureWebApplication1.MvcApplication,Info,RD0003FF410F59,2984,1,,Application_Start,",
NLog消息如下:
"2014-05-07,12:18:49.6254,TestAzureWebApplication1.MvcApplication,Info,RD0003FF410F59,2984,1,,Application_Start,"
它被转义,完全适合CSV列,我不希望这样。有什么想法可以解决这个问题吗?
答案 0 :(得分:0)
对于您要完成的任务,您需要依赖Custom Diagnostics
的{{1}}功能。它的工作方式是您的NLog记录器将CSV格式的日志文件写入云服务VM中的本地存储,然后Azure诊断模块将定期将此数据传输到blob存储。
有关实施细节,我建议Azure Diagnostics
小组查看Cloud Service Fundamentals
项目。他们在博客文章中详细描述了这个过程,你可以在这里阅读:http://social.technet.microsoft.com/wiki/contents/articles/17987.cloud-service-fundamentals.aspx。你想要做的是阅读Azure CAT
部分下的所有博客文章。对于我们构建的服务,我们实际上已经实现了这个并且它的工作非常好。