anchor.diff:  	 start_link/1,
   	 log/2,
   	 log/3,
  +	 log_iolist/2,
   	 quit/1
   	]).
   
  
positive.code: 
  %% do_log is executed in caller pid (by log/2 or log/3), not in
  %% persistent logger process.
  do_log(Level, Format, Arguments) when is_atom(Level), is_list(Format), is_list(Arguments) ->
      %%				      Level == debug; Level == normal; Level == error ->
      {Megasec, Sec, USec} = now(),
      USecStr = format_usec(USec, 3),
      DateTime = util:sec_to_date(Megasec * 1000000 + Sec),
      LogTS = lists:concat([DateTime, ".", USecStr]),
      Data = format_msg(LogTS, Level, self(), Format, Arguments),
      gen_server:cast(logger, {log, Level, Data}),
      ok.
  
  
  %% Precision = integer(),range = 1 - 6
  format_usec(Usec, Precision) ->
  
negative.code:     file:write(IoDevice, Data).
  
  log_to_stdout(Data) ->
      try
  	io:put_chars(Data)
      catch
  	exit: {ebadf, _} ->
  	    %% When our supervisor shuts down it's children, we will loose
  	    %% our ability to log to stdout before we are shut down, when
  	    %% we are logging other processes shutdowns and the logger
  	    %% process will in fact crash, diverting attention from the
  	    %% real reason for shutdown. We therefor need to ignore 'ebadf'
  	    %% errors :(
  	    ok
      end.
  
  %%--------------------------------------------------------------------
  %% Function: create_filename_time_suffix()
  %% Descrip.: Return a date string (european style) suitable for
  %%           appending to a filename when rotating it.
  %% Returns : string()
  