进出入完善组织机构并加入导入人员和机构功能
554325746@qq.com
2019-08-07 07a66e53d2b4126c2004870d81a379d8ef0071da
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
81
82
83
84
85
86
87
88
89
90
91
92
%% 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 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([]) ->
    %% set up the config, is safe even during relups
    lager_config:new(),
    %% TODO:
    %% Always start lager_event as the default and make sure that
    %% other gen_event stuff can start up as needed
    %%
    %% Maybe a new API to handle the sink and its policy?
    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]}],
 
    CrashLog = decide_crash_log(application:get_env(lager, crash_log, false)),
 
    {ok, {{one_for_one, 10, 60},
          Children ++ CrashLog
         }}.
 
validate_positive({ok, Val}, _Default) when is_integer(Val) andalso Val >= 0 ->
    Val;
validate_positive(_Val, Default) ->
    Default.
 
determine_rotation_date({ok, ""}) ->
    undefined;
determine_rotation_date({ok, Val3}) ->
    case lager_util:parse_rotation_date_spec(Val3) of
        {ok, Spec} -> Spec;
        {error, _} ->
            error_logger:error_msg("Invalid date spec for "
                                   "crash log ~p~n", [Val3]),
            undefined
    end;
determine_rotation_date(_) ->
    undefined.
 
determine_rotator_mod({ok, Mod}, _Default) when is_atom(Mod) ->
    Mod;
determine_rotator_mod(_, Default) ->
    Default.
 
decide_crash_log(undefined) ->
    [];
decide_crash_log(false) ->
    [];
decide_crash_log(File) ->
    MaxBytes = validate_positive(application:get_env(lager, crash_log_msg_size), 65536),
    RotationSize = validate_positive(application:get_env(lager, crash_log_size), 0),
    RotationCount = validate_positive(application:get_env(lager, crash_log_count), 0),
 
    RotationDate = determine_rotation_date(application:get_env(lager, crash_log_date)),
    RotationMod = determine_rotator_mod(application:get_env(lager, crash_log_rotator), lager_rotator_default),
 
 
    [{lager_crash_log, {lager_crash_log, start_link, [File, MaxBytes,
                                                      RotationSize, RotationDate, RotationCount, RotationMod]},
      permanent, 5000, worker, [lager_crash_log]}].