使用log4net和azure file appender设置日志文件限制

时间:2017-07-17 18:41:49

标签: azure log4net azure-storage-files

我目前正在使用log4net和azure文件存储我的日志,工作正常。

我一直在搜索并且找不到任何配置来使记录器创建的文件不超过给定的KB大小。

这是我的配置:

    

  <rollingStyle value="Size" />
  <MaxSizeRollBackups value="10" />
  <MaximumFileSize value="10KB" />

  <AzureStorageConnectionString value="connectiondatahere" />
  <ShareName value="filelog" />
  <Path value="processor" />
  <File value="processor_{yyyy-MM-dd}.txt" />
  <layout type="log4net.Layout.PatternLayout">
    <ConversionPattern value="%date %-5level %logger %message%newline"/>
  </layout>
</appender>
<root>
  <level value="ALL" />
  <appender-ref ref="AzureFileAppender"/>
</root>

我尝试过这种配置的一些变种,但没有运气。

1 个答案:

答案 0 :(得分:0)

在查看log4net-appender-azurefilestorage的源代码后,我发现当前天文件appender中不支持日志文件大小限制。我建议你自己重写azure文件appender并添加大小限制功能。

以下是执行此操作的步骤。

步骤1,将名为MaximumFileSize的属性添加到AzureFileAppender类。

public int MaximumFileSize { get; set; }

步骤2,在将日志附加到文件时添加大小限制代码。

protected override void Append(LoggingEvent loggingEvent)
{
    Initialise(loggingEvent);
    var buffer = Encoding.UTF8.GetBytes(RenderLoggingEvent(loggingEvent));

    if ((_file.Properties.Length + buffer.Length) > MaximumFileSize)
    {
        //do something if the file reach the max file size
    }
    else
    {
        _file.Resize(_file.Properties.Length + buffer.Length);
        using (var fileStream = _file.OpenWrite(null))
        {
            fileStream.Seek(buffer.Length * -1, SeekOrigin.End);
            fileStream.Write(buffer, 0, buffer.Length);
        }
    }
}

步骤3,之后,您可以将大小限制(每个字节)添加到配置文件。

<MaximumFileSize value="10240" />