使用 AzureAppendBlobAppender 在 Azure blob 中写入文本文件
Use AzureAppendBlobAppender to write text file in 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>
全部,
由于 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);
}
}
我正在使用 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>
全部,
由于 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);
}
}