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

变奏曲,十一月……

永远不要说永远……

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

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

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

GOK358405961 发布于:

-module(lager_console_backend).


-behaviour(gen_event).


-export([init/1, handle_call/2, handle_event/2, handle_info/2, terminate/2,

        code_change/3]).


-record(state, {level, formatter,format_config}).


-include("lager.hrl").


-define(TERSE_FORMAT,[time, " [", severity,"] ", message, "\r\n"]).


%% @private

init(Level) when is_atom(Level) ->

    init([Level,{lager_default_formatter,?TERSE_FORMAT}]);

init([Level, true]) -> % for backwards compatibility

    init([Level,{lager_default_formatter,[{eol, "\r\n"}]}]);

init([Level,false]) -> % for backwards compatibility

    init([Level,{lager_default_formatter,?TERSE_FORMAT}]);

init([Level,{Formatter,FormatterConfig}])  when is_atom(Level), is_atom(Formatter)->

   try lager_util:config_to_mask(Level) of%将log_level配置转换为相关掩码

        Levels ->

            {ok, #state{level=Levels,%log_level掩码

                    formatter=Formatter, %用来格式化输出信息的函数

                    format_config=FormatterConfig}}%输出格式配置信息

    catch

        _:_ ->

            {error, bad_log_level}

    end.



%% @private

handle_call(get_loglevel, #state{level=Level} = State) ->%获取log_level掩码

    {ok, Level, State};

handle_call({set_loglevel, Level}, State) ->%重设log_level掩码

   try lager_util:config_to_mask(Level) of

        Levels ->

            {ok, ok, State#state{level=Levels}}

    catch

        _:_ ->

            {ok, {error, bad_log_level}, State}

    end;

handle_call(_Request, State) ->

    {ok, ok, State}.


%% @private

handle_event({log, Message},

    #state{level=L,formatter=Formatter,format_config=FormatConfig} = State) ->

    case lager_util:is_loggable(Message, L, ?MODULE) of%判断信息是否需要从控制台输出

        true ->

            io:put_chars(user, Formatter:format(Message,FormatConfig)),%输出到控制台

            {ok, State};

        false ->

            {ok, State}

    end;

handle_event(_Event, State) ->

    {ok, State}.


%% @private

handle_info(_Info, State) ->

    {ok, State}.


%% @private

terminate(_Reason, _State) ->

    ok.


%% @private

code_change(_OldVsn, State, _Extra) ->

    {ok, State}.

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

日志分类