Guy MacArthur Team : Web Development Tags : Web Development Umbraco

Error logging with email notifications in Umbraco

Guy MacArthur Team : Web Development Tags : Web Development Umbraco

Sometime in the late 4.x version days, Umbraco began using log4net as its logging framework. Out of the box the Umbraco CMS logs entries (statements, objects, etc …) of a severity of WARN or higher to a text file in a preconfigured folder of your website. The initial configuration is great for most of the sites I’ve developed and provides a wealth of information on the logged issues.

Many of my sites require more attentive monitoring and for those I set up email notifications for logs of severity ERROR or higher. Thankfully, this is a simple update to the log4net configuration file.

First, add the following SMTP appender section to your log4net configuration file, found in the config folder of the website, replacing the to, from and smtpHost values with your own settings.

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
  <to value="TO EMAIL ADDRESS" />
  <from value=”FROM EMAIL ADDRESS" />
  <subject value="test logging message" />
  <smtpHost value="HOST - i.e. localhost" />
  <bufferSize value="512" />
  <lossy value="true" />
  <evaluator type="log4net.Core.LevelEvaluator">
    <threshold value="ERROR"/>
  </evaluator>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
  </layout>
</appender>

Next, add the following appender-ref element to the root section of the log4net config file:

<appender-ref ref="SmtpAppender" />

And, you’re done. The final config file will look something like this:

<?xml version="1.0"?>
  <log4net>
    <root>
      <priority value="Warn"/>
      <appender-ref ref="AsynchronousLog4NetAppender" />
      <appender-ref ref="SmtpAppender" />
    </root>
  <appender name="AsynchronousLog4NetAppender" type="Umbraco.Core.Logging.AsynchronousRollingFileAppender, Umbraco.Core">
    <file value="App_Data\Logs\UmbracoTraceLog.txt" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <maximumFileSize value="5MB" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
    <encoding value="utf-8" />
  </appender>
  <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
    <to value="TO EMAIL ADDRESS" />
    <from value="FROM EMAIL ADDRESS" />
    <subject value="test logging message" />
    <smtpHost value="HOST - i.e. localhost" />
    <bufferSize value="512" />
    <lossy value="true" />
    <evaluator type="log4net.Core.LevelEvaluator">
      <threshold value="ERROR"/>
    </evaluator>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
    </layout>
  </appender>
</log4net>

The end result of this configuration is that all log entries of a severity of WARN or higher will be logged to the file system, and all entries of severity ERROR or higher, in addition to being logged to the file system, will also be emailed out to the address set in the SmtpAppender section.