Erlang SASL

sasl是一个应用,sasl的一个重要功能便是可以记录系统进程相关日志,如进程启动、结束、崩溃错误等信息。sasl的日志功能是基于erlang自带的日志模块error_logger来实现的。我简单的介绍下SASL的使用。

1.简单分析SASL的源码

start(_, []) ->
    Handler = get_sasl_error_logger(),
    Type = get_sasl_error_logger_type(),
    Mf = get_error_logger_mf(),
    add_sasl_error_logger(Handler, Type),
    add_error_logger_mf(Mf),
    State = #state{sasl_error_logger = Handler, error_logger_mf = Mf}, 
    case supervisor:start_link({local, sasl_sup}, sasl, []) of
	{ok, Pid} -> {ok, Pid, State};
	Error -> Error
    end.

这是SASL启动的流程 ,源码erlang里面有,大家可以去自行查看。

sasl_error_logger: 错误信息的显示点。 有 false,tty,{file,File}3个参数。

false:不显示

tty:控制台

{file,File}:写到文件

errlog_type:日志的错误类型

error:错误信息

progress:进程信息

all:所有信息

get_mf() -> 
    Dir = get_mf_dir(),
    MaxB = get_mf_maxb(),
    MaxF = get_mf_maxf(),
    case {Dir, MaxB, MaxF} of
	{undefined,undefined,undefined} = R ->
	    R;
	{undefined,_,_} ->
	    exit({missing_config, {sasl, error_logger_mf_dir}}); %%文件目录
	{_,undefined,_} ->
	    exit({missing_config, {sasl, error_logger_mf_maxbytes}}); %%文件大小
	{_,_,undefined} ->
	    exit({missing_config, {sasl, error_logger_mf_maxfiles}}); %%指定最大可用文件个数
	R ->
	    R
    end.

循环日志。你可以把循环日志想像成一个由错误日志产生的巨大环形缓存区域。

新的消息进来时,会把它加到日志的尾部,如果日志被装满了,最早的条目就会被清除。

循环日志是一个极有用的特性。你可以决定总共有多少个日志文件,以及单个日志文件的大小。

系统负责帮你删除旧文件以及创建新文件,以维持整个巨大的环形数据区域。你可以调整日志大小,

以用来记录最近几天的操作,这在大多数情况下都是绰绰有余的了。

------------------------------------------------------------------------ 分割线 -----------------------------------------------------------------------------------

一些sasl的配置文件

elog1.config

%% no tty

[{sasl, [

{sasl_error_logger, false}

]}].

elog2.config

%% single text file - minimal tty

[{sasl, [

%% All reports go to this file

{sasl_error_logger, {file, "/home/joe/error_logs/THELOG" }}

]}].

elog3.config

%% rotating log and minimal tty

[{sasl, [

{sasl_error_logger, false},

%% define the parameters of the rotating log

%% the log file directory

{error_logger_mf_dir,"/home/joe/error_logs" },

%% # bytes per logfile

{error_logger_mf_maxbytes,10485760}, % 10 MB

%% maximum number of logfiles

{error_logger_mf_maxfiles, 10}

]}].

elog4.config

%% rotating log and errors

[{sasl, [

%% minimise shell error logging

{sasl_error_logger, false},

%% only report errors

{errlog_type, error},

%% define the parameters of the rotating log

%% the log file directory

{error_logger_mf_dir,"/home/joe/error_logs" },

%% # bytes per logfile

{error_logger_mf_maxbytes,10485760}, % 10 MB

%% maximum number of

{error_logger_mf_maxfiles, 10}

]}].


2.启动SASL的方式

erl –boot start_sasl 默认配置文件下启动SASL, {env, [{sasl_error_logger, tty},{errlog_type, all}]},,见源码 sasl.app文件。

erl -boot start_sasl -config xxxx.config  启动指定配置文件例如 elog1.config ,elog2.config 。。。配置文件默认目录是ebin,可自己指定目录。

还可以用 application:start(sasl). 在代码里启动应用。默认会读取代码ebin下的sasl.app,可去源码复制一份sasl.app然后修改 env参数。

 sasl是通过application:get_env(sasl,xxx) 获得配置信息 。

SASL.app

%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 1996-2010. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved online at http://www.erlang.org/.
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
%%
%% %CopyrightEnd%
%%
{application, sasl,
   [{description, "SASL  CXC 138 11"},
    {vsn, "2.2.1"},
    {modules, [sasl, 
      alarm_handler, 
               format_lib_supp, 
               misc_supp, 
               overload, 
               rb, 
               rb_format_supp, 
      release_handler, 
      release_handler_1, 
      erlsrv,
      sasl_report, 
      sasl_report_tty_h, 
      sasl_report_file_h, 
      si,
      si_sasl_supp,
      systools, 
      systools_make, 
      systools_rc, 
      systools_relup, 
      systools_lib
     ]},
    {registered, [sasl_sup, alarm_handler, overload, release_handler]},
    {applications, [kernel, stdlib]},
    {env, [{sasl_error_logger, tty},
           {errlog_type, all}]},
    {mod, {sasl, []}}]}.


  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值