Log4net Email весь журнал - PullRequest
       1

Log4net Email весь журнал

3 голосов
/ 08 декабря 2011

.Net 4

Я использую log4net в службе Windows. Служба имеет внутренний таймер и запускается каждые 30 минут. Я хотел бы получать электронную почту со всеми действиями регистрации каждый раз, когда обработка завершена. Единственные примеры, которые я нашел, были с приложением smtp, но оно отправляет электронное письмо каждый раз, когда что-то регистрируется, что мне не нужно.

Я бы подумал, что это нормальный вариант использования, но не могу найти подходящих примеров ...

Спасибо за любую помощь!

Ответы [ 3 ]

2 голосов
/ 08 декабря 2011

Я не думаю, что это стандартное использование, поскольку SMTPAppender в основном предназначен для использования при возникновении ошибок (что должно быть редко).Вот описание приложения:

Отправка электронной почты при возникновении определенного события регистрации, как правило, при ошибках или неустранимых ошибках.

ПросмотрВ документации для SMTPAppender я вижу, что одним из свойств является класс, который оценивает входное сообщение и решает, следует ли инициировать отправку электронного письма .

. Вы можетесоздать пользовательский класс, который будет отправлять электронную почту при отправке определенного сообщения, определенного источника и т. д.

Я не уверен, что вы можете установить его из конфигурации с помощью пользовательского класса.Вы можете программно добавить appender и установить это свойство.

Возможно, вам потребуется увеличить свойство BufferSize , чтобы получить нужную историю журналов.

Или вы можете свернуть свой собственный аппендер .Я не могу придумать, как бы вы спроектировали его так, чтобы он сильно отличался от SMTPAppender, за исключением того, что вы, возможно, сделали свой буфер неограниченным (что немного опасно).войдите в приложение для добавления файла журнала , и каждые тридцать минут запускайте сервис / запланированное задание, отправляйте по электронной почте файл журнала, очищайте его и умирайте.Ранее я делал это в производственном веб-приложении, используя запланированные задачи и командные файлы, развернутые через MSI, который мы создали в WIX, с настраиваемым действием для развертывания запланированной задачи.

1 голос
/ 25 апреля 2016

Вы можете использовать как отдельный регистратор;при условии, что ваш log4net.config выглядит примерно так:

<log4net xmlns="urn:log4net">
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <threshold value="All" />
    <file value="../Logs/MyApp/myapp.log" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyy-MM-dd.'log'" />
    <maxSizeRollBackups value="5" />
    <maximumFileSize value="10MB" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{HH':'mm':'ss'.'fff} [%4t] %-5p %M - %m %15property{ipAddress} - %property{orderId}%n" />
    </layout>
  </appender>
  <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
    <to value="<your to address>" />
    <from value="<your from address>" />
    <subject value="<your subject line>" />
    <smtpHost value="<your smtp host>"/>
    <username value="<your username>" />
    <password value="<your password>" />
    <port value="25" />
    <authentication value="Basic" />
    <evaluator type="log4net.Core.LevelEvaluator">
      <threshold value="Error" />
    </evaluator>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%newline[%property{log4net:HostName}] [%date] [%-5level] [%logger] - [%message]%newlineIp[%property{IpAddress}] Session[%property{SessionId}] OrderId[%property{OrderId}] UserAgent[%property{UserAgent}]%newline%newline%exception" />
    </layout>
  </appender>

  <root>
    <level value="ALL" />
    <appender-ref ref="RollingLogFileAppender" />
    <appender-ref ref="SmtpAppender" />
  </root>
</log4net>

Тогда вы можете изменить его так, чтобы он выглядел следующим образом:

<log4net xmlns="urn:log4net">
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <threshold value="All" />
    <file value="../Logs/MyApp/myapp.log" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyy-MM-dd.'log'" />
    <maxSizeRollBackups value="5" />
    <maximumFileSize value="10MB" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{HH':'mm':'ss'.'fff} [%4t] %-5p %M - %m %15property{ipAddress} - %property{orderId}%n" />
    </layout>
  </appender>
  <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
    <to value="<your to address>" />
    <from value="<your from address>" />
    <subject value="<your subject line>" />
    <smtpHost value="<your smtp host>"/>
    <username value="<your username>" />
    <password value="<your password>" />
    <port value="25" />
    <authentication value="Basic" />
    <evaluator type="log4net.Core.LevelEvaluator">
      <threshold value="Error" />
    </evaluator>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%newline[%property{log4net:HostName}] [%date] [%-5level] [%logger] - [%message]%newlineIp[%property{IpAddress}] Session[%property{SessionId}] OrderId[%property{OrderId}] UserAgent[%property{UserAgent}]%newline%newline%exception" />
    </layout>
  </appender>
  <appender name="SmtpJobAppender" type="log4net.Appender.SmtpAppender">
    <to value="<job to address>" />
    <from value="<job from address>" />
    <subject value="<job subject line>" />
    <smtpHost value="<your smtp host>"/>
    <username value="<your username>" />
    <password value="<your password>" />
    <port value="25" />
    <authentication value="Basic" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%newline[%property{log4net:HostName}] [%date] [%-5level] [%logger] - [%message]%newlineIp[%property{IpAddress}] Session[%property{SessionId}] OrderId[%property{OrderId}] UserAgent[%property{UserAgent}]%newline%newline%exception" />
    </layout>
  </appender>
  <logger name="Any.Name.You.Want.To.Indicate.This.Is.Your.Job.Completed.Log">
    <level value="ALL"/>
    <appender-ref ref="SmtpJobAppender"/>
  </logger>
  <root>
    <level value="INFO" />
    <appender-ref ref="RollingLogFileAppender" />
    <appender-ref ref="SmtpAppender" />
  </root>
</log4net>

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

private static readonly ILog JobLogger = LogManager.GetLogger("Any.Name.You.Want.To.Indicate.This.Is.Your.Job.Completed.Log");

И в своем полном методе используйте свой регистратор заданий:

JobLogger.Info("Job complete - process time was " + process.Time);

Это позволит вам иметь разные строки темы в ваших полных электронных письмах о работе и вашей ошибкеэлектронные письма.Они могут даже отличаться от адресов, что упрощает настройку правил вашего почтового клиента.

1 голос
/ 08 декабря 2011

Полагаю, вы можете либо создать свой собственный пользовательский аппендер, который буферизирует журналы, а затем сбросить его, когда вам нужно (каждые 30 минут в вашем случае), или установить очень большой размер буфера в существующем аппендине (и надеюсь, что это не так). достичь в течение этих 30 минут) и промывать каждые 30 минут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...