首页 文章

将nlog生成的日志存储在Azure Blob存储中,在单独的列中

提问于
浏览
0

我've enabled diagnostics logging to Blob Storage for an Azure Website I am trying on. I' ve还设置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列,我不希望这样 . 有什么想法可以解决这个问题吗?

1 回答

  • 0

    对于您要完成的任务,您需要依赖 Azure DiagnosticsCustom Diagnostics 功能 . 它的工作方式是NLog Logger 将CSV格式的日志文件写入 Cloud 服务VM中的本地存储,然后Azure诊断模块将定期将此数据传输到blob存储 .

    有关实施细节,我建议您查看 Azure CAT 团队的Cloud Service Fundamentals项目 . 他们在博客文章中详细描述了这个过程,你可以在这里阅读:http://social.technet.microsoft.com/wiki/contents/articles/17987.cloud-service-fundamentals.aspx . 你想要做的是阅读 Telemetry 部分下的所有博客文章 . 对于我们已经构建的服务,我们实际上实现了这个并且它的工作非常好 .

相关问题