使用 log4net.Appender.AzureAppendBlobAppender 时出现 "BlockCountExceedsLimit" 异常

Getting "BlockCountExceedsLimit" exception while using log4net.Appender.AzureAppendBlobAppender

我正在使用 log4net.Appender.AzureAppendBlobAppender 来记录我的网络应用程序的信息和错误。有时我会收到 "BlockCountExceedsLimit" 异常。这是由于附加 blob 在通过异常(冲突(409))之后仅接受 50,000 个块提交。我检查了代码,发现它等待 512 个日志事件并将每个日志条目分别刷新到附加 blob。因此,我们一天只能记录 50,000 条日志条目。

谁能帮我解决这个问题?有人知道这个的替代品吗?

谢谢, 卡尔提克

根据你的描述,我假设你使用的是log4net.Appender.Azure nuget package. As you can see under AzureAppendBlobAppender.cs:

    private static string Filename(string directoryName)
    {
        return string.Format("{0}/{1}.entry.log.xml",
                             directoryName,
                             DateTime.Today.ToString("yyyy_MM_dd",
                                                             DateTimeFormatInfo.InvariantInfo));
    }

据我了解,您可以按照 AzureAppendBlobAppender.cs 编写自定义 AzureAppendBlobAppender 并调整 FilenameSendBuffer 方法以满足您的要求。

I'm using log4net.Appender.AzureAppendBlobAppender to log my web app's info & errors.

由于您使用 azure web 应用程序来托管您的应用程序,您可以使用内置的应用程序日志记录 (Blob),并且 azure 端会帮助您每小时生成一次日志。您可以登录 Azure 门户,选择您的 Web 应用程序,启用应用程序日志记录 (Blob),将日志记录级别设置为信息,您可以关注详细信息 Enable diagnostics logging for web apps in Azure App Service

对于您的应用程序,您可以使用以下代码来记录信息和错误。

System.Diagnostics.Trace.TraceError("xxxxx");

System.Diagnostics.Trace.TraceInformation("xxxxx");

我已经稍微更改了代码以附加 blob,一旦缓冲区达到阈值(512 个日志条目),它将在单次提交中刷新日志条目。