anchor.diff:  set_level_integer(Int) ->
       gen_event:call(error_logger, couch_log, {set_level_integer, Int}).
   
  -handle_event({Pid, couch_error, {Format, Args}}, {Fd, _LogLevel, _Sasl}=State) ->
  -    log(Fd, Pid, error, Format, Args),
  +handle_event({Pid, couch_error, {Format, Args}}, State) ->
  +    log(State, Pid, error, Format, Args),
       {ok, State};
  -handle_event({Pid, couch_info, {Format, Args}}, {Fd, LogLevel, _Sasl}=State)
  +handle_event({Pid, couch_info, {Format, Args}}, #state{level = LogLevel} = St)
   when LogLevel =< ?LEVEL_INFO ->
  -    log(Fd, Pid, info, Format, Args),
  -    {ok, State};
  -handle_event({Pid, couch_debug, {Format, Args}}, {Fd, LogLevel, _Sasl}=State)
  +    log(St, Pid, info, Format, Args),
  +    {ok, St};
  +handle_event({Pid, couch_debug, {Format, Args}}, #state{level = LogLevel} = St)
   when LogLevel =< ?LEVEL_DEBUG ->
  -    log(Fd, Pid, debug, Format, Args),
  -    {ok, State};
  -handle_event({error_report, _, {Pid, _, _}}=Event, {Fd, _LogLevel, Sasl}=State)
  -when Sasl =/= false ->
  -    log(Fd, Pid, error, "~p", [Event]),
  -    {ok, State};
  -handle_event({error, _, {Pid, Format, Args}}, {Fd, _LogLevel, Sasl}=State)
  -when Sasl =/= false ->
  -    log(Fd, Pid, error, Format, Args),
  -    {ok, State};
  -handle_event({_, _, {Pid, _, _}}=Event, {Fd, LogLevel, _Sasl}=State)
  -when LogLevel =< ?LEVEL_TMI ->
  -    % log every remaining event if tmi!
  -    log(Fd, Pid, tmi, "~p", [Event]),
  +    log(St, Pid, debug, Format, Args),
  +    {ok, St};
  +handle_event({error_report, _, {Pid, _, _}}=Event, #state{sasl = true} = St) ->
  +    log(St, Pid, error, "~p", [Event]),
  +    {ok, St};
  +handle_event({error, _, {Pid, Format, Args}}, #state{sasl = true} = State) ->
  +    log(State, Pid, error, Format, Args),
       {ok, State};
   handle_event(_Event, State) ->
       {ok, State}.
   
  -handle_call({set_level_integer, NewLevel}, {Fd, _LogLevel, Sasl}) ->
  +handle_call({set_level_integer, NewLevel}, State) ->
       ets:insert(?MODULE, {level, NewLevel}),
  -    {ok, ok, {Fd, NewLevel, Sasl}}.
  +    {ok, ok, State#state{level = NewLevel}}.
   
   handle_info(_Info, State) ->
       {ok, State}.
  
positive.code: code_change(_OldVsn, State, _Extra) ->
      {ok, State}.
  
  terminate(_Arg, {Fd, _LoggingLevel, _Sasl}) ->
      file:close(Fd).
  
  log(Fd, Pid, Level, Format, Args) ->
      Msg = io_lib:format(Format, Args),
      ok = io:format("[~s] [~p] ~s~n", [Level, Pid, Msg]), % dump to console too
      Msg2 = re:replace(lists:flatten(Msg),"\\r\\n|\\r|\\n", "\r\n",
          [global, {return, list}]),
      ok = io:format(Fd, "[~s] [~s] [~p] ~s\r~n", [httpd_util:rfc1123_date(), Level, Pid, Msg2]).
  
  read(Bytes, Offset) ->
      LogFileName = couch_config:get("log", "file"),
  
negative.code:     % TODO: make streaming
  
      {ok, Chunk} = file:pread(Fd, Start, LogFileSize),
      ok = file:close(Fd),
      Chunk.
  