Приложение log4net для больших двоичных объектов Azure

Можно ли при сохранении журналов в хранилище BLOB-объектов Azure создавать новую папку в день? Сейчас я использую эту конфигурацию, и она отлично работает

<appender name="AzureAppender2" type="log4net.Appender.AzureBlobAppender, log4net.Appender.Azure">
     <param name="ContainerName" value="testcon" />
     <param name="DirectoryName" value="myfolder/logs.txt" />
     <param name="ConnectionString" value="DefaultEndpointsProtocol=https;AccountName=testcon;AccountKey="rftgdfgdfgfdg78=="/>
     <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
</appender>

Я уже пробовал это

<param name="DirectoryName" value=%date/" />

Но не работает

Я хочу иметь возможность динамически использовать разные папки в день: что-то вроде

DirectoryName = 13.05.2016

DirectoryName = 2016-05-12

DirectoryName = 11.05.2016

Это достижимо?

Спасибо


person Mihai    schedule 13.05.2016    source источник
comment
Я не пробовал это лично, но на основе быстрого поиска (это, например: stackoverflow.com/questions/571876/), вы можете попробовать что-нибудь вроде <param name="DirectoryName" value=%date/logs.txt" />?   -  person Gaurav Mantri    schedule 13.05.2016
comment
Спасибо. Пробовал, не работает :)   -  person Mihai    schedule 13.05.2016


Ответы (1)


Вот код для приложения на GitHub.

Вот свойство класса DirectoryName, которое отображается из значения конфигурации:

   private string _directoryName;

    public string DirectoryName
    {
        get
        {
            if (String.IsNullOrEmpty(_directoryName))
                throw new ApplicationException(Resources.DirectoryNameNotSpecified);
            return _directoryName;
        }
        set
        {
            _directoryName = value;
        }
    }

И соответствующий метод Filename, который фактически создает имя файла для большого двоичного объекта:

private static string Filename(LoggingEvent loggingEvent, string directoryName)
        {
            return string.Format("{0}/{1}.{2}.entry.log.xml",
                                 directoryName,
                                 loggingEvent.TimeStamp.ToString("yyyy_MM_dd_HH_mm_ss_fffffff",
                                                                 DateTimeFormatInfo.InvariantInfo),
                                 Guid.NewGuid().ToString().ToLower());
        }

Похоже, что имя_каталога принимает только статические значения. Хорошо, что это открытый исходный код ...

person Kyle Hale    schedule 13.05.2016
comment
Спасибо. Я тоже это видел, но надеялся найти способ сделать это, не изменяя код самому :) - person Mihai; 13.05.2016