首页 > 解决方案 > 使用 AzureAppendBlobAppender 在 Azure blob 中写入文本文件

问题描述

我正在使用 log4net.Appender.Azure 中的 AzureAppendBlobAppender 写入 blob。但是日志是以 XML 格式生成的。我怎样才能将它们放在普通文本文件中,就像 RollingFileAppender 生成的方式一样。

 <appender name="AzureAppender2" type="log4net.Appender.AzureAppendBlobAppender, log4net.Appender.Azure">
 <param name="ContainerName" value="#######" />
 <param name="DirectoryName" value="######" />
 <param name="ConnectionString" value="#####"/>      
  <datePattern value="'.'yyyyMMdd'.log'" />
  <maximumFileSize value="5MB" />
  <bufferSize value="100" />
 <layout type="log4net.Layout.PatternLayout">        
    <conversionPattern value="%date [%thread] %level %logger %machine - %message e:%exception%newline %newline" />
  </layout>
</appender>

标签: log4netlog4net-appender

解决方案


全部,

由于 log4net.Appender.Azure 是开源的,因此我可以自定义它。我通过修改 AzureAppendBlobAppender.cs 中的以下方法找到了解决方案。

            private void ProcessEvent(LoggingEvent loggingEvent)
                {
                    CloudAppendBlob appendBlob = _cloudBlobContainer.GetAppendBlobReference(Filename(_directoryName));            
                    var log = "";
                    if (loggingEvent.Level == Level.Error)
                    {
                    log = Environment.NewLine + string.Format("{0} Exception : " + Environment.NewLine + "{1}", loggingEvent.TimeStamp, loggingEvent.GetExceptionString());
                    }
                    else
                    log = Environment.NewLine + string.Format("{0} Information : " + Environment.NewLine + "{1}", loggingEvent.TimeStamp, loggingEvent.RenderedMessage);

                    using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(log)))
                    {
                    appendBlob.AppendBlock(ms);
                    }
                }

推荐阅读