4. 文本文件和shell
接下来的配置文件会在shell里列出错误报告,所有的进度报告则会保存在一个文件里
%%文件erlog1.config
[{sasl, [
{sasl_error_logger, {file,"log"}}
]}].
这里我们再去启动erlshell,并生成一个错误消息
PS C:\CodeProjects\ErlangProjects\erlang_learning\src\.cfg> erl -boot start_sasl -config erlog
Eshell V9.3 (abort with ^G)
1> error_logger:error_msg("There is an error").
=ERROR REPORT==== 12-Sep-2024::22:36:45 ===
There is an errorok
2>
然后查看之前配置的日志文件
=PROGRESS REPORT==== 12-Sep-2024::22:39:55 ===
supervisor: {local,sasl_safe_sup}
started: [{pid,<0.62.0>},
{id,alarm_handler},
{mfargs,{alarm_handler,start_link,[]}},
{restart_type,permanent},
{shutdown,2000},
{child_type,worker}]
=PROGRESS REPORT==== 12-Sep-2024::22:39:55 ===
supervisor: {local,sasl_sup}
started: [{pid,<0.61.0>},
{id,sasl_safe_sup},
{mfargs,
{supervisor,start_link,
[{local,sasl_safe_sup},sasl,safe]}},
{restart_type,permanent},
{shutdown,infinity},
{child_type,supervisor}]
=PROGRESS REPORT==== 12-Sep-2024::22:39:55 ===
supervisor: {local,sasl_sup}
started: [{pid,<0.63.0>},
{id,release_handler},
{mfargs,{release_handler,start_link,[]}},
{restart_type,permanent},
{shutdown,2000},
{child_type,worker}]
=PROGRESS REPORT==== 12-Sep-2024::22:39:55 ===
application: sasl
started_at: nonode@nohost
这里只列出了进度报告,而它们原本应该出现在shell里。进度报告是关于大事件的,比如启动和停止应用程序。但是error_logger:error_msg/1报告的错误没有保存在日志里,为此我们必须配置一个滚动日志。
5.滚动日志和shell
下面的配置既能提供shell输出,又能把写入shell的所有信息复制到一个滚动日志文件里
%%erlog2.config
[ {sasl, [
{sasl_error_logger, false},
%% 定义滚动日志的参数
%% 日志文件目录
{error_logger_mf_dir, "log"},
%% 每个文件的大小 单位:Byte
{error_logger_mf_maxbytes, 2048}, % 2 KB
%% 日志文件的最大数量
{error_logger_mf_maxfiles, 10}
]}].
PS C:\CodeProjects\ErlangProjects\erlang_learning\src\.cfg> erl -boot start_sasl -config erlog
Eshell V9.3 (abort with ^G)
1> error_logger:error_msg("There is an error").
ok
=ERROR REPORT==== 12-Sep-2024::22:59:34 ===
There is an error
2>
6.生成环境
在生产环境里,我们真正感兴趣的只有错误,而非进度或信息报告,所以只让错误记录器报
告错误。如果没有这个设置,系统也许就会被信息和进度报告所淹没
我们只需要再加一个错误类型的配置
%%erlog3.config
[ {sasl, [
{sasl_error_logger, false},
%% 定义滚动日志的参数
%% 只记录错误error类型
{errorlog_type, error},
%% 日志文件目录
{error_logger_mf_dir, "log1"},
%% 每个文件的大小 单位:Byte
{error_logger_mf_maxbytes, 2048}, % 2 KB
%% 日志文件的最大数量
{error_logger_mf_maxfiles, 10}
]}].
运行它会产生与之前例子类似的输出,区别在于错误日志里只会有错误报告。