网站地图
首页
新闻
电影新闻
电视新闻
人物新闻
专题策划
影评
最新影评
新片热评
经典赏析
媒体评论
电影院
北京影讯
上海影讯
广州影讯
深圳影讯
成都影讯
电影库
典藏佳片
全球新片
即将上映
票房榜
社区
日志
相册
电影
好友
专辑
收藏
影视杂谈
明星时尚
文化休闲
群组
话题
达人
排行榜
电影榜
电视榜
人物榜
日志榜
话题榜

变奏曲,十一月……

永远不要说永远……

http://i.mtime.com/844165/

您当前的位置: 社区>> 博客>>

编辑 | 删除 erlang large日志系统代码阅读(二):lager_sup

GOK358405961 发布于:

       上次忘了说了,代码在https://github.com/basho/lager, 版本是2.0.0,在git上的commit tag是e749242087,文件开始的版权声明和后面单元测试相关的代码被去掉了,祝大家玩的开心。


-module(lager_sup).


-behaviour(supervisor).


%% API

-export([start_link/0]).


%% Callbacks

-export([init/1]).


start_link() ->

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


%创建保存lager handler配置的ets表,启动gen_event 进程 lager_event 和 

%lager_event handler 监控进程的监控进程 lager_handler_watcher_sup

%如果配置文件或者.app中有crash_log相关配置再启动 lager_crash_log 进程


init([]) ->

    %% set up the config, is safe even during relups

    lager_config:new(), %创建保存lager handler配置的ets表

    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

            }}.

回复 (0) | 收藏 (0) | 2616 次阅读 |

日志分类