0

我目前正在使用 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>

我已经尝试了这种配置的一些变体,但没有运气。

4

1 回答 1

0

在查看log4net-appender-azurefilestorage的源代码后,我发现 azure file 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" />
于 2017-07-18T02:02:51.813 回答