Log4Net - заставить приложение smtp отправлять электронную почту только после 100 ошибок

Я хотел бы отправить электронное письмо только после того, как 100 ОШИБОК были записаны в виде таблицы html (это цель SmtpExtendedAppender, перебрать все сохраненные сообщения), но я не уверен, как получить к ним доступ .

Это мой app.config:

<appender name="SmtpAppender" type="log4net.Appender.SmtpExtendedAppender">
        <authentication value="Basic" />
        <password value="xxxxxx"/>
        <username value="xxxxxxxx"/>
        <from value="[email protected]" />
        <to value="[email protected]" />
        <smtpHost value="smtp.gmail.com" />
        <isBodyHtml value="true" />
        <bufferSize value="100" />
        <EnableSsl value="true"/>
        <subject value="test logging message" />
        <lossy value="true" />
        <evaluator type="log4net.Core.LevelEvaluator">
            <threshold value="WARN"/>
        </evaluator>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date{ABSOLUTE} [%logger]%newlineUsername: %property{username}%newline%level - %message%newline%exception" />
        </layout>
    </appender>

Это мое консольное приложение:

static void Main(string[] args)
        {
            Console.WriteLine("hello world");

            log.Error("This is my first error message");

            log.Error("This is my second error message");

            Console.ReadLine();
        }

Я не совсем понимаю, как работает размер буфера log4net, хотя я дал ему значение 100, он отправляет мне 2 отдельных письма каждый раз, когда я запускаю консольное приложение.

Если я запущу это приложение 50 раз, чтобы получить 100 ОШИБОК, можно ли будет накопить их, а затем отправить в одном электронном письме?


person Offir    schedule 29.03.2017    source источник
comment
Я так не думаю - когда приложение выходит, приложение закрывается, сбрасывает буфер, и поэтому электронные письма отправляются. Вам нужно будет расширить приложение, чтобы иметь какое-то резервное хранилище для сохранения событий журнала до тех пор, пока не будет достигнуто пороговое значение.   -  person stuartd    schedule 29.03.2017
comment
@stuartd, вы имеете в виду хранить сообщения в cache или session?   -  person Offir    schedule 29.03.2017
comment
Если вы не готовы потерять сообщения, вам следует использовать постоянное хранилище.   -  person stuartd    schedule 29.03.2017
comment
@stuartd В этом ответе он говорит, что сообщения буфера сохраняются в ОЗУ, stackoverflow.com/questions/30630952/ Это правда?   -  person Offir    schedule 29.03.2017
comment
Пока процесс (т. е. ваше консольное приложение работает) сообщения буферизируются в памяти процесса. Когда процесс завершается (приложение завершается), все, что находится в буфере, сбрасывается.   -  person stuartd    schedule 29.03.2017


Ответы (1)


Нет, это невозможно. Приложение работает не с несколькими экземплярами вашего приложения. Каждый раз, когда вы перезапускаете приложение, все буферы пусты.

person Peter    schedule 29.03.2017