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: -module(couch_log).
  -behaviour(gen_event).
  
  -export([start_link/0,stop/0]).
  -export([debug_on/0,info_on/0,get_level/0,get_level_integer/0, set_level/1]).
  -export([init/1, handle_event/2, terminate/2, code_change/3, handle_info/2, handle_call/2]).
  -export([read/2]).
  
  -define(LEVEL_ERROR, 3).
  -define(LEVEL_INFO, 2).
  -define(LEVEL_DEBUG, 1).
  -define(LEVEL_TMI, 0).
  
  level_integer(error)    -> ?LEVEL_ERROR;
  level_integer(info)     -> ?LEVEL_INFO;
  level_integer(debug)    -> ?LEVEL_DEBUG;
  level_integer(tmi)      -> ?LEVEL_TMI;
  level_integer(_Else)    -> ?LEVEL_ERROR. % anything else default to ERROR level
  
  level_atom(?LEVEL_ERROR) -> error;
  level_atom(?LEVEL_INFO) -> info;
  level_atom(?LEVEL_DEBUG) -> debug;
  level_atom(?LEVEL_TMI) -> tmi.
  
  
  start_link() ->
  
negative.code:     % TODO: make streaming
  
      {ok, Chunk} = file:pread(Fd, Start, LogFileSize),
      ok = file:close(Fd),
      Chunk.
  