summaryrefslogtreecommitdiff
path: root/deps/lager/src/lager_sup.erl
blob: 7c2b29b7574b4f63f623a27ff08ad1007b43c378 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
%% Copyright (c) 2011 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 Lager's top level supervisor.

%% @private

-module(lager_sup).

-behaviour(supervisor).

%% API
-export([start_link/0]).

%% Callbacks
-export([init/1]).

start_link() ->
    supervisor:start_link({local, ?MODULE}, ?MODULE, []).

init([]) ->
    Children = [
        {lager, {gen_event, start_link, [{local, lager_event}]},
            permanent, 5000, worker, [dynamic]},
        {lager_handler_watcher_sup, {lager_handler_watcher_sup, start_link, []},
            permanent, 5000, supervisor, [lager_handler_watcher_sup]}],

    %% check if the crash log is enabled
    Crash = case application:get_env(lager, crash_log) of
        {ok, undefined} ->
            [];
        {ok, File} ->
            MaxBytes = case application:get_env(lager, crash_log_msg_size) of
                {ok, Val} when is_integer(Val) andalso Val > 0 -> Val;
                _ -> 65536
            end,
            RotationSize = case application:get_env(lager, crash_log_size) of
                {ok, Val1} when is_integer(Val1) andalso Val1 >= 0 -> Val1;
                _ -> 0
            end,
            RotationCount = case application:get_env(lager, crash_log_count) of
                {ok, Val2} when is_integer(Val2) andalso Val2 >=0 -> Val2;
                _ -> 0
            end,
            RotationDate = case application:get_env(lager, crash_log_date) of
                {ok, Val3} ->
                    case lager_util:parse_rotation_date_spec(Val3) of
                        {ok, Spec} -> Spec;
                        {error, _} when Val3 == "" -> undefined; %% blank is ok
                        {error, _} ->
                            error_logger:error_msg("Invalid date spec for "
                                "crash log ~p~n", [Val3]),
                            undefined
                    end;
                _ -> undefined
            end,

            [{lager_crash_log, {lager_crash_log, start_link, [File, MaxBytes,
                        RotationSize, RotationDate, RotationCount]},
                    permanent, 5000, worker, [lager_crash_log]}];
        _ ->
            []
    end,

    {ok, {{one_for_one, 10, 60},
            Children ++ Crash
            }}.