anchor.diff:  %% @doc
  -%% FIXME
  +%% Main interface for work with log flows.
   %% @end
   %% ----------------------------------------------------------------------
   %% Copyright (c) 2011 Siberian Fast Food
  
positive.code:                  enabled_loggers = [] :: list(atom())}).
  
  
  %%% API
  get_flows() ->
      gen_server:call(?SERVER, get_flows).
  
  print_flows() ->
      gen_server:call(?SERVER, print_flows).
  
  set_flow_priority(Id, Priority) ->
      gen_server:call(?SERVER, {set_flow_priority, Id, Priority}).
  
  set_flow_filter(Id, Filter) ->
      gen_server:call(?SERVER, {set_flow_filter, Id, Filter}).
  
  set_flow_loggers(Id, Loggers) ->
      gen_server:call(?SERVER, {set_flow_loggers, Id, Loggers}).
  
  disable_flow(Id) ->
      gen_server:call(?SERVER, {disable_flow, Id}).
  
  enable_flow(Id) ->
      gen_server:call(?SERVER, {enable_flow, Id}).
  
  delete_flow(Id) ->
      gen_server:call(?SERVER, {delete_flow, Id}).
  
  delete_all_flows() ->
      gen_server:call(?SERVER, delete_all_flows).
  
  add_new_flow(Filter, Priority, Loggers) ->
      gen_server:call(?SERVER, {add_new_flow, Filter, Priority, Loggers}).
  
  replase_flows(Flows) ->
      gen_server:call(?SERVER, {replase_flows, Flows}).
  
  
negative.code:                   {tag, atom()} | {tag, [atom()]} |
                    {app, atom()}.
  
  -type priority() :: debug | info | notice | warning | error 
                      | critical | alert | emergency | integer().
  
  -type priority_expr() :: '<' | '>' | '=<' | '>=' | '==' | '/='.
  
  -type priority_pattern() :: list({priority_expr(), priority()}) |
                              {priority_expr(), priority()} | priority().
  
  -record(flow, {id              :: non_neg_integer(),
                 filter          :: filter(),
                 priority        :: priority_pattern(),
                 loggers  = []   :: list(atom()),
                 enabled  = true :: boolean()}).
  
  