anchor.diff:      gen_event:sync_notify(?EVENT_LOGGER, {log_info, LogMsg}).
   
   %% @doc Open a new log file for writing
  --spec log_open(string()) -> {file:io_device(), non_neg_integer()}.
  +-spec log_open(string()) -> {file:io_device(), datehour()}.
   log_open(FileName) ->
       DateHour = datehour(),
       {log_open(FileName, DateHour), DateHour}.
   
   %% @doc Open a new log file for writing
  --spec log_open(string(), non_neg_integer()) -> file:io_device().
  +-spec log_open(string(), datehour()) -> file:io_device().
   log_open(FileName, DateHour) ->
       LogName = FileName ++ suffix(DateHour),
       error_logger:info_msg("opening log file: ~p~n", [LogName]),
  
positive.code: %% @doc Close a log file.
  -spec log_close(atom(), string(), file:io_device()) -> ok | {error, term()}.
  log_close(Mod, Name, FD) ->
      log_info([Mod, ": closing log file: ", Name, $\n]),
      file:close(FD).
  
  %% @doc Notify registered log event handler of an error event.
  
negative.code: 
  %% Ugly reformatting code to get times like +0000 and -1300
  
  -spec zone(float()) -> string().
  zone(Val) when Val < 0 ->
      io_lib:format("-~4..0w", [trunc(abs(Val))]);
  zone(Val) when Val >= 0 ->
  