log4net - 使用 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>
解决方案
全部,
由于 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);
}
}
推荐阅读
- javascript - 获取创建元素的 _id 而不是 mongodb 中的整个数据
- spring-boot - 如何下载文件然后在spring控制器中更改视图
- julia - 尝试使用 GeometricFlux.jl 训练变量 GNN
- python - Combine seaborn legends with histplot
- swift - 变异函数可以在延迟后执行进一步的变异吗?
- pine-script - 策略测试:金字塔功能/追踪止损不起作用?
- javascript - 如何在网页中垂直滚动后让元素跟随光标
- python - 配置文件命令(需要一些帮助)
- python - 如何将 matplotlib.pyplot.table 分配给单独的子图?
- iar - 在非 Linux 环境中使用动态库