You can use as separate logger; assuming your log4net.config looks something like this:
<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>
Then you could modify it to look like this:
<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>
And in the class you have your job complete function you would declare your job logger:
private static readonly ILog JobLogger = LogManager.GetLogger("Any.Name.You.Want.To.Indicate.This.Is.Your.Job.Completed.Log");
And in your complete method use your job logger:
JobLogger.Info("Job complete - process time was " + process.Time);
This will allow you to have different subject lines in your job complete emails and your error emails. They can even have different from addresses, making your email client rules easy to set up.