<style>
/* Changing the layout to use less space for mobiles */
@media screen and (max-device-width: 480px), screen and (-webkit-min-device-pixel-ratio: 2) {
#email-body { min-width: 30em !important; }
#email-page { padding: 8px !important; }
#email-banner { padding: 8px 8px 0 8px !important; }
#email-avatar { margin: 1px 8px 8px 0 !important; padding: 0 !important; }
#email-fields { padding: 0 8px 8px 8px !important; }
#email-gutter { width: 0 !important; }
}
</style>
<div id="email-body">
<table id="email-wrap" align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#f0f0f0;color:#000000;width:100%;">
<tr valign="top">
<td id="email-page" style="padding:16px !important;">
<table align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#ffffff;border:1px solid #bbbbbb;color:#000000;width:100%;">
<tr valign="top">
<td bgcolor="#003366" style="background-color:#003366;color:#ffffff;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;line-height:1;"><img src="http://jira.qos.ch/s/en_USb9v8hf-418945332/850/27/_/jira-logo-scaled.png" alt="" style="vertical-align:top;" /></td>
</tr><tr valign="top">
<td id="email-banner" style="padding:32px 32px 0 32px;">
<table align="left" border="0" cellpadding="0" cellspacing="0" width="100%" style="width:100%;">
<tr valign="top">
<td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;padding:0;">
<img id="email-avatar" src="http://jira.qos.ch/secure/useravatar?avatarId=10122" alt="" height="48" width="48" border="0" align="left" style="padding:0;margin: 0 16px 16px 0;" />
<div id="email-action" style="padding: 0 0 8px 0;font-size:12px;line-height:18px;">
<a class="user-hover" rel="mlodder" id="email_mlodder" href="http://jira.qos.ch/secure/ViewProfile.jspa?name=mlodder" style="color:#326ca6;">Menno Lodder</a>
created <img src="http://jira.qos.ch/images/icons/issuetypes/bug.png" height="16" width="16" border="0" align="absmiddle" alt="Bug"> <a style='color:#326ca6;text-decoration:none;' href='http://jira.qos.ch/browse/LOGBACK-1084'>LOGBACK-1084</a>
</div>
<div id="email-summary" style="font-size:16px;line-height:20px;padding:2px 0 16px 0;">
<a style='color:#326ca6;text-decoration:none;' href='http://jira.qos.ch/browse/LOGBACK-1084'><strong>Logback fails to create gz files on next day when doing rollover based on time and size</strong></a>
</div>
</td>
</tr>
</table>
</td>
</tr>
<tr valign="top">
<td id="email-fields" style="padding:0 32px 32px 32px;">
<table border="0" cellpadding="0" cellspacing="0" style="padding:0;text-align:left;width:100%;" width="100%">
<tr valign="top">
<td id="email-gutter" style="width:64px;white-space:nowrap;"></td>
<td>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Issue Type:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
<img src="http://jira.qos.ch/images/icons/issuetypes/bug.png" height="16" width="16" border="0" align="absmiddle" alt="Bug"> Bug
</td>
</tr> <tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Affects Versions:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
1.1.3 </td>
</tr>
<tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Assignee:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
<a class="user-hover" rel="logback-dev@qos.ch" id="email_logback-dev@qos.ch" href="http://jira.qos.ch/secure/ViewProfile.jspa?name=logback-dev%40qos.ch" style="color:#326ca6;">Logback dev list</a>
</td>
</tr> <tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Attachments:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
logback_gps_fails.xml </td>
</tr>
<tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Created:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
24/Jun/15 9:14 AM
</td>
</tr> <tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Description:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
<p style='margin-top:0;margin-bottom:10px;'>This problem has occurred when after I upgraded from logback 1.1.2 to logback 1.1.3 </p>
<p style='margin-top:0;margin-bottom:10px;'>I have a configuration with a SizeAndTimeBasedFNATP, with a date in the filename and a size restriction and file compression (gz). Now when I start my application a new files get created correctly, with a rollover as expected, and the debug output reports no problems with my configuration. <br/>
Until midnight the rollover continues to work without error (roughly every 5MB = 60 minutes). After midnight however I get tmp files (uncompressed), instead of correctly named compressed files </p>
<p style='margin-top:0;margin-bottom:10px;'>Possibly the problem is that the date is in a different timezone (UTC) than the system (+2:00, CEST). This worked like a charm in v1.1.2, but the files were created based on the date in the local timezone, and not the UTC timezone (which is not a surprise because this feature was added in v1.1.3, hence my upgrade).</p>
<p style='margin-top:0;margin-bottom:10px;'>I did two runs, one where I found the issue on the 22nd to the 23rd and around 6 hours later one where I turned on logback debug logging on the 23rd to the 24th.</p>
<p style='margin-top:0;margin-bottom:10px;'>After starting I get the following logback warning:<br/>
17:33:37,044 |-WARN in ReconfigureOnChangeFilter</p>
{invocationCounter=0}
<p style='margin-top:0;margin-bottom:10px;'> - Due to missing top level configuration file, automatic reconfiguration is impossible.<br/>
I don't think this was here before, also it doesn't seem relevent.</p>
<p style='margin-top:0;margin-bottom:10px;'>I get the following warnings in my console (timestamps are local time, and probably are at the time of the rollowever <br/>
18:12:00,453 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@bc464 - Unexpected periodsElapsed value 0<br/>
19:01:27,046 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@bc464 - Unexpected periodsElapsed value 0<br/>
19:52:31,045 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@bc464 - Unexpected periodsElapsed value 0<br/>
20:51:25,044 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@bc464 - Unexpected periodsElapsed value 0<br/>
21:44:09,045 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@bc464 - Unexpected periodsElapsed value 0<br/>
22:38:10,646 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@bc464 - Unexpected periodsElapsed value 0<br/>
23:35:08,245 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@bc464 - Unexpected periodsElapsed value 0<br/>
00:00:00,045 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@bc464 - Unexpected periodsElapsed value 0<br/>
00:00:42,813 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@1550481 - Unexpected periodsElapsed value 0<br/>
00:59:41,645 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@bc464 - Unexpected periodsElapsed value 0<br/>
00:59:41,645 |-WARN in ch.qos.logback.core.rolling.helper.Compressor - The target compressed file named <span class="error">[/home/orbit/orbit-log/./gps-2015-06-23.0.log.gz]</span> exist already. Aborting file compression.<br/>
02:00:06,045 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@bc464 - Unexpected periodsElapsed value 0<br/>
02:00:06,045 |-WARN in ch.qos.logback.core.rolling.helper.Compressor - The target compressed file named <span class="error">[/home/orbit/orbit-log/./gps-2015-06-23.1.log.gz]</span> exist already. Aborting file compression.<br/>
02:58:23,846 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@bc464 - Unexpected periodsElapsed value 0<br/>
02:58:23,847 |-WARN in ch.qos.logback.core.rolling.helper.Compressor - The target compressed file named <span class="error">[/home/orbit/orbit-log/./gps-2015-06-23.2.log.gz]</span> exist already. Aborting file compression.<br/>
03:53:51,446 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@bc464 - Unexpected periodsElapsed value 0<br/>
03:53:51,446 |-WARN in ch.qos.logback.core.rolling.helper.Compressor - The target compressed file named <span class="error">[/home/orbit/orbit-log/./gps-2015-06-23.3.log.gz]</span> exist already. Aborting file compression.<br/>
04:53:19,846 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@bc464 - Unexpected periodsElapsed value 0<br/>
04:53:19,846 |-WARN in ch.qos.logback.core.rolling.helper.Compressor - The target compressed file named <span class="error">[/home/orbit/orbit-log/./gps-2015-06-23.4.log.gz]</span> exist already. Aborting file compression.<br/>
05:53:13,046 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@bc464 - Unexpected periodsElapsed value 0<br/>
05:53:13,046 |-WARN in ch.qos.logback.core.rolling.helper.Compressor - The target compressed file named <span class="error">[/home/orbit/orbit-log/./gps-2015-06-23.5.log.gz]</span> exist already. Aborting file compression.<br/>
06:49:48,045 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@bc464 - Unexpected periodsElapsed value 0<br/>
06:49:48,045 |-WARN in ch.qos.logback.core.rolling.helper.Compressor - The target compressed file named <span class="error">[/home/orbit/orbit-log/./gps-2015-06-23.6.log.gz]</span> exist already. Aborting file compression.<br/>
07:46:35,245 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@bc464 - Unexpected periodsElapsed value 0<br/>
07:46:35,245 |-WARN in ch.qos.logback.core.rolling.helper.Compressor - The target compressed file named <span class="error">[/home/orbit/orbit-log/./gps-2015-06-23.7.log.gz]</span> exist already. Aborting file compression.</p>
<p style='margin-top:0;margin-bottom:10px;'>Note that the first lines correspond to compression that did work.</p>
<p style='margin-top:0;margin-bottom:10px;'>The last 2 warnings are contained in the following log block:</p>
<p style='margin-top:0;margin-bottom:10px;'>2015-06-24T05:46:21.264Z I [MyThread<span class="error">[1]</span>] My log message<br/>
07:46:35,244 |-INFO in c.q.l.co.rolling.helper.RenameUtil - Renaming file <span class="error">[/home/orbit/orbit-log/./gps.log]</span> to <span class="error">[/home/orbit/orbit-log/./gps.log142143386539207.tmp]</span><br/>
07:46:35,245 |-WARN in ch.qos.logback.core.rolling.helper.SizeAndTimeBasedArchiveRemover@bc464 - Unexpected periodsElapsed value 0<br/>
07:46:35,245 |-WARN in ch.qos.logback.core.rolling.helper.Compressor - The target compressed file named <span class="error">[/home/me/log/./gps-2015-06-23.7.log.gz]</span> exist already. Aborting file compression.<br/>
2015-06-24T05:46:46.291Z I [MyThread<span class="error">[1]</span>] My log message</p>
<p style='margin-top:0;margin-bottom:10px;'>Note that the file tries to create a file for 2015-06-23, while the date already is 2015-06-24 in both local timezone and UTC.</p>
<p style='margin-top:0;margin-bottom:10px;'>The following files are created:<br/>
<del>rw-r</del><del>r</del>- 1 me me 1,4M jun 24 08:28 debug.log<br/>
<del>rw-r</del><del>r</del>- 1 me me 443K jun 22 10:45 gps-2015-06-22.0.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 790K jun 22 20:54 gps-2015-06-22.10.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 504K jun 22 21:44 gps-2015-06-22.11.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 667K jun 22 22:39 gps-2015-06-22.12.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 606K jun 22 23:32 gps-2015-06-22.13.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 305K jun 23 00:00 gps-2015-06-22.14.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 445K jun 22 11:35 gps-2015-06-22.1.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 444K jun 22 12:25 gps-2015-06-22.2.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 451K jun 22 13:15 gps-2015-06-22.3.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 463K jun 22 14:04 gps-2015-06-22.4.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 465K jun 22 16:34 gps-2015-06-22.5.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 465K jun 22 17:23 gps-2015-06-22.6.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 472K jun 22 18:13 gps-2015-06-22.7.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 467K jun 22 19:02 gps-2015-06-22.8.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 617K jun 22 19:55 gps-2015-06-22.9.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 540K jun 23 18:12 gps-2015-06-23.0.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 467K jun 23 19:01 gps-2015-06-23.1.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 491K jun 23 19:52 gps-2015-06-23.2.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 841K jun 23 20:51 gps-2015-06-23.3.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 589K jun 23 21:44 gps-2015-06-23.4.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 631K jun 23 22:38 gps-2015-06-23.5.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 765K jun 23 23:35 gps-2015-06-23.6.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 338K jun 24 00:00 gps-2015-06-23.7.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 4,0M jun 24 08:28 gps.log<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 24 00:59 gps.log117729785907984.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 24 02:00 gps.log121354186583311.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 24 02:58 gps.log124851987521238.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 24 03:53 gps.log128179587434968.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 24 04:53 gps.log131747987324007.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 24 05:53 gps.log135341187168934.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 24 06:49 gps.log138736186478923.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 24 07:46 gps.log142143386539207.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 23 00:56 gps.log31136498179814.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 23 01:56 gps.log34724898094749.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 23 02:56 gps.log38335098833090.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 23 03:48 gps.log41436897868386.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 23 04:37 gps.log44389898817954.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 23 05:27 gps.log47402097911265.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 23 06:22 gps.log50717897411081.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 23 07:19 gps.log54092097393732.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 23 08:16 gps.log57567298020701.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 23 09:10 gps.log60805298522413.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 23 10:00 gps.log63755698125678.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 5,1M jun 23 10:51 gps.log66864097980152.tmp<br/>
<del>rw-r</del><del>r</del>- 1 me me 2,9K jun 23 00:00 system-2015-06-22.0.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 6,3K jun 24 00:00 system-2015-06-23.0.log.gz<br/>
<del>rw-r</del><del>r</del>- 1 me me 41K jun 24 08:28 system.log</p>
<p style='margin-top:0;margin-bottom:10px;'>The relevant configuration for the gps is:</p>
<p style='margin-top:0;margin-bottom:10px;'> <appender name="GpsLogFileAppender"<br/>
class="ch.qos.logback.core.rolling.RollingFileAppender"><br/>
<file>$</p>
{GPSLOG_FILEBASE}.log</file><br/>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><br/>
<!-- rollover daily --><br/>
<fileNamePattern>${GPSLOG_FILEBASE}
<p style='margin-top:0;margin-bottom:10px;'>-%d</p>
{yyyy-MM-dd,UTC}
<p style='margin-top:0;margin-bottom:10px;'>.%i.log.gz</fileNamePattern><br/>
<timeBasedFileNamingAndTriggeringPolicy<br/>
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><br/>
<maxFileSize>5MB</maxFileSize><br/>
</timeBasedFileNamingAndTriggeringPolicy><br/>
<maxHistory>10</maxHistory><br/>
<cleanHistoryOnStart>true</cleanHistoryOnStart><br/>
</rollingPolicy></p>
<p style='margin-top:0;margin-bottom:10px;'> <encoder><br/>
<pattern>$</p>
{SYSTEMLOG_PARTTERN}
<p style='margin-top:0;margin-bottom:10px;'></pattern><br/>
</encoder><br/>
</appender></p>
<p style='margin-top:0;margin-bottom:10px;'>I will attach the full configuration file, note that the variable instancename is not set here. In v1.1.2 I used the same config file (except for the debug="true" part).</p>
<p style='margin-top:0;margin-bottom:10px;'>This is ran using debian 7.1 linux.</p>
</td>
</tr>
<tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Project:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
<a style="color:#326ca6;" href="http://jira.qos.ch/browse/LOGBACK">logback</a>
</td>
</tr> <tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Priority:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
<img src="http://jira.qos.ch/images/icons/priorities/critical.png" height="16" width="16" border="0" align="absmiddle" alt="Critical"> Critical
</td>
</tr>
<tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Reporter:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
<a class="user-hover" rel="mlodder" id="email_mlodder" href="http://jira.qos.ch/secure/ViewProfile.jspa?name=mlodder" style="color:#326ca6;">Menno Lodder</a>
</td>
</tr> </table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td><!-- End #email-page -->
</tr>
<tr valign="top">
<td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:10px;line-height:14px;padding: 0 16px 16px 16px;text-align:center;">
This message is automatically generated by JIRA.<br />
If you think it was sent incorrectly, please contact your JIRA administrators<br />
For more information on JIRA, see: <a style='color:#326ca6;' href='http://www.atlassian.com/software/jira'>http://www.atlassian.com/software/jira</a>
</td>
</tr>
</table><!-- End #email-wrap -->
</div><!-- End #email-body -->