- %% Copyright (c) 2011-2012 Basho Technologies, Inc. All Rights Reserved.
- %%
- %% This file is provided to you under the Apache License,
- %% Version 2.0 (the "License"); you may not use this file
- %% except in compliance with the License. You may obtain
- %% a copy of the License at
- %%
- %% http://www.apache.org/licenses/LICENSE-2.0
- %%
- %% Unless required by applicable law or agreed to in writing,
- %% software distributed under the License is distributed on an
- %% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- %% KIND, either express or implied. See the License for the
- %% specific language governing permissions and limitations
- %% under the License.
-
- %% @doc Helper functions for working with lager's runtime config
-
- -module(lager_config).
-
- -include("lager.hrl").
-
- -export([new/0, new_sink/1, get/1, get/2, set/2,
- global_get/1, global_get/2, global_set/2]).
-
- -define(TBL, lager_config).
- -define(GLOBAL, '_global').
-
- %% For multiple sinks, the key is now the registered event name and the old key
- %% as a tuple.
- %%
- %% {{lager_event, loglevel}, Value} instead of {loglevel, Value}
-
- new() ->
- %% set up the ETS configuration table
- _ = try ets:new(?TBL, [named_table, public, set, {keypos, 1}, {read_concurrency, true}]) of
- _Result ->
- ok
- catch
- error:badarg ->
- ?INT_LOG(warning, "Table ~p already exists", [?TBL])
- end,
- new_sink(?DEFAULT_SINK),
- %% Need to be able to find the `lager_handler_watcher' for all handlers
- ets:insert_new(?TBL, {{?GLOBAL, handlers}, []}),
- ok.
-
- new_sink(Sink) ->
- %% use insert_new here so that if we're in an appup we don't mess anything up
- %%
- %% until lager is completely started, allow all messages to go through
- ets:insert_new(?TBL, {{Sink, loglevel}, {element(2, lager_util:config_to_mask(debug)), []}}).
-
- global_get(Key) ->
- global_get(Key, undefined).
-
- global_get(Key, Default) ->
- get({?GLOBAL, Key}, Default).
-
- global_set(Key, Value) ->
- set({?GLOBAL, Key}, Value).
-
-
- get({_Sink, _Key}=FullKey) ->
- get(FullKey, undefined);
- get(Key) ->
- get({?DEFAULT_SINK, Key}, undefined).
-
- get({Sink, Key}, Default) ->
- try
- case ets:lookup(?TBL, {Sink, Key}) of
- [] ->
- Default;
- [{{Sink, Key}, Res}] ->
- Res
- end
- catch
- _:_ ->
- Default
- end;
- get(Key, Default) ->
- get({?DEFAULT_SINK, Key}, Default).
-
- set({Sink, Key}, Value) ->
- ets:insert(?TBL, {{Sink, Key}, Value});
- set(Key, Value) ->
- set({?DEFAULT_SINK, Key}, Value).
|