sasl中的error_logger_mf日志处理器,是基于log_mf_h的。其有一个日志信息的过滤接口,但在sasl中并没有实现。也就是说,理论上重新定义sasl中的这个过滤函数sasl:pred(),就可以在sasl日志中实现按日志类型进行过滤的功能。
在发现这个问题后,本想暂时放弃,继续项目的推进,等有空闲的时候再进行尝试。但心痒难耐,还是对sasl进行了改造,重新定义了过滤函数sasl:pred(),实现了对日志的过滤功能。
首先,参照error_logger文档中对Event的说明,将日志信息分为了五类,如下:
system: 包括监管(supervisor_report)、崩溃(crash_report)、
进程(progress)三种信息;
info: 由error_logger:info_XXXX()产生的日志信息;
warning: 由error_logger:warning_XXXX()产生的日志信息;
error: 由error_logger:error_XXXX()产生的日志信息;
other: 由于error_logger支持自定义日志信息类型,
不在上述标准类型内的日志信息,均归为other;
这五类日志信息,没有优先级别上的划分。需要记录哪一类日志信息,要在配置文件中,明确声明。否则将不会被记录在日志文件中。
在配置文件中,需要增加一个参数{error_logger_mf_ftype, [XXXX,XXXX,...]}。这个参数对应的是一个list,其中包含需要写入日志文件的日志信息分类。既上述五种类型中的一种或几种。示例如下:
[{sasl, [
%% sasl_error_logger config
{sasl_error_logger, false},
%% error_logger_mf config
{error_logger_mf_dir,"./logs"},
{error_logger_mf_maxbytes,10485760}, % 10 MB
{error_logger_mf_maxfiles, 10},
%% system|info|warning|error|other
{error_logger_mf_ftype, [system, error]}
]}].
对sasl.erl的修改,主要是增加一个配置读取函数get_mf_ftype(),重新定义了过滤还是pred(),并对pred()调用方式进行了调整。
get_mf_ftype()负责读取{error_logger_mf_ftype, [XXXX,XXXX,...]}中的配置信息,没什么新意,参看附件中的实现即可。
原有的pred()仅有一个参数Event,既pred(Event)。为了实现对日志信息的过滤,新的pred()函数有两个参数,pred(Event, Ftypes)。基本思路是,先解析Event的类型,并归类。然后判断该类型信息,是在许可列表中。
pred({_Type, GL, _Msg}, _FTypes) when node(GL) /= node() -> false;
pred(Event, FTypes) ->
EventType =
case Event of
{error, _GL, _Msg}-> error;
{error_report, _GL, {_Pid, std_error, _Rep}}-> error;
{error_report, _GL, {_Pid, Type, _Rep}}->
case Type of
supervisor_report-> system;
crash_report-> system;
_-> other
end;
{info_msg, _GL, _Msg}-> info;
{info_report, _GL, {_Pid, std_info, _Ret}}-> info;
{info_report, _GL, {_Pid, Type, _Ret}}->
case Type of
progress-> system;
_-> other
end;
{warning_msg, _GL, _Msg}-> warning;
{warning_report, _GL, {_Pid, std_warning, _Rep}}-> warning;
{warning_report, _GL, {_Pid, Type, _Rep}}-> other
end,
lists:member(EventType, FTypes).
至此,sasl中的日志过滤功能,基本实现了。用rb参看日志信息时,可以看到,只有指定类型的信息才能被记录在日志文件中。
附言:
1、sasl.erl中还有一些小的修改,将附件中修改后的sasl.erl与标准的sasl.erl对比,即可看到。
2、对sasl.erl的修改,仅实现功能。因运行环境、时间等方面的原因,在性能方面没有测试过。
3、在标准的sasl.erl中对pred()的调用是这种方式log_mf_h:init(Dir, MaxB, MaxF, {sasl, pred})。看了一下log_mf_h:init()的实现,第四个参数是一个fun()类型的参数。也就是说{sasl, pred}是一个erlang支持fun()类型。在erlang.spawn()中更有类似如下的定义:
spawn({M,F}=MF) when is_atom(M), is_atom(F) ->
spawn(erlang, apply, [MF, []]);
这是我头一次看到这种方式。《Programming Erlang》中好像也没有相关的说明。有哪位仁兄了解,能对此详细给说明一下吗?
谢了!!
分享到:
相关推荐
在`/etc/postfix/main.cf`配置文件中,启用SMTPD SASL认证功能,添加`Smtpd_sasl_auth_enable = yes`,并禁止匿名登录,设置`Smtpd_sasl_security_options = noanonymous`。这样,只有通过认证的用户才能使用SMTP...
Extmail是一个开源的、全功能的邮件服务器解决方案,提供SMTP、POP3和WebMail服务,支持多语言、模板定制以及强大的管理和过滤功能。 首先,了解电子邮件系统的基本构成。一个完整的电子邮件系统包括三个主要组件:...
包括邮件基本模块、邮件传输代理、数据库、邮件接收、Web帐户管理后台、SMTP认证库、日志分析及显示、Web服务器、Php支持、防病毒软件、SMTP阶段反垃圾邮件工具、内容过滤器等多个组件。下面将对这些组件进行详细的...
Java的`java.util.logging`或第三方日志框架如Log4j可以帮助实现这个功能。 10. **扩展性**:优秀的邮件服务器应具备良好的模块化和扩展性,方便添加新功能或与其他系统集成。 在“Cheng_Mail备份”这个文件中,...
6. **Cyrus SASL (Simple Authentication and Security Layer)** - 实现SMTP服务器的身份验证功能。 7. **Courier Authlib** - 提供带有身份验证的POP3服务器。 8. **Courier IMAP** - 支持POP3和IMAP协议,使得用户...
此外,Postfix支持SASL插件,可以与Cyrus或dovecot等身份验证服务集成,提供安全的认证机制。TLS加密(自2.2版开始支持)确保了邮件传输过程中的数据安全。Postfix还具备内容过滤器,允许在邮件传递之前进行内容检查...
2. **rsyslog-5.8.10-12.el6.x86_64.rpm**:rsyslog是一个强大的系统日志守护进程,它可以收集、过滤、存储和转发系统日志。在`crontab`任务运行时,如果需要记录任务执行情况,rsyslog会扮演关键角色。 3. **cyrus...
- 与Amavis等防病毒/防垃圾邮件工具的集成:增加邮件过滤层。 8. **故障排查**: - 查看日志文件:错误信息通常在日志中能找到线索。 - 使用`postconf -n`查看当前生效的配置。 - 邮件传递问题:使用`postfix/...
邮件队列、日志记录、管理员角色、备份管理器以及SSL证书管理等都是Djigzo为提高邮件服务器的可操作性、安全性和稳定性所提供的附加功能。 在邮件队列方面,可以监控和管理邮件发送队列,日志记录则记录系统的各种...
Cyrus SASL提供认证功能,确保只有授权用户能够访问邮件服务。OpenWebmail和Squirrelmail是两种Webmail服务,用户可以通过浏览器收发邮件,其中Squirrelmail是Red Hat默认提供的,而OpenWebmail是第三方选择。...
Postfix邮件系统的搭建涉及多个环节,包括安全配置、反垃圾邮件策略、邮件过滤和日志分析等。这些内容可以根据实际需求进行深入学习和配置。在实际环境中,通常还会配合其他软件,如Dovecot(POP3/IMAP服务器)和...
MDA如maildrop,用于处理POSTFIX投递的邮件,它支持过滤和高级功能。 ### 认证库 POSTFIX可以通过外部认证库增强安全性,如: - **courier-authlib**:用于courier-imap和maildrop的认证。 - **cyrus-sasl**:标准...
可以通过集成Amavisd-new、SpamAssassin和ClamAV等工具,实现邮件过滤功能。这些工具可以帮助检测并阻止垃圾邮件和病毒邮件。 7. **虚拟邮箱与多域支持** 如果需要为多个用户或域提供邮件服务,可以配置Postfix的...
6. **日志记录**:MQTTFX 还提供了日志记录功能,帮助开发者追踪连接状态和通信过程,便于分析和调试。 7. **主题历史**:工具可以记录并显示订阅主题的历史消息,这对于追溯问题和分析数据流非常有用。 8. **多...
3. **身份验证**:为了提高安全性,Postfix支持多种身份验证方法,如SMTP SASL认证,可以通过`smtpd_sasl_auth_enable`等参数开启,并配置相应的认证后台,如 Cyrus SASL 或 Dovecot SASL。 4. **反垃圾邮件**:...
- 配置规则以过滤垃圾邮件和病毒邮件。 #### 六、测试与维护 1. **发送测试邮件** - 使用 `mail` 命令或其他工具发送测试邮件。 - 检查邮件是否能成功到达目标地址。 2. **性能监控** - 使用 RRDTool 等...