`
wjtz72
  • 浏览: 8942 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

给sasl日志增加过滤功能

阅读更多

    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》中好像也没有相关的说明。有哪位仁兄了解,能对此详细给说明一下吗?
            谢了!!

分享到:
评论
1 楼 mryufeng 2009-09-17  
在erlang.spawn()中更有类似如下的定义:
                spawn({M,F}=MF) when is_atom(M), is_atom(F) ->
                               spawn(erlang, apply, [MF, []]);
            这是我头一次看到这种方式。《Programming Erlang》中好像也没有相关的说明。有哪位仁兄了解,能对此详细给说明一下吗?

这种方式是个erlang支持的函数方式 但是快要过时了 下个版本应该要移除了。

相关推荐

    linux下防垃圾邮件

    在`/etc/postfix/main.cf`配置文件中,启用SMTPD SASL认证功能,添加`Smtpd_sasl_auth_enable = yes`,并禁止匿名登录,设置`Smtpd_sasl_security_options = noanonymous`。这样,只有通过认证的用户才能使用SMTP...

    Extmail_Centos+5.5搭建设置篇

    Extmail是一个开源的、全功能的邮件服务器解决方案,提供SMTP、POP3和WebMail服务,支持多语言、模板定制以及强大的管理和过滤功能。 首先,了解电子邮件系统的基本构成。一个完整的电子邮件系统包括三个主要组件:...

    extmail服务器部署

    包括邮件基本模块、邮件传输代理、数据库、邮件接收、Web帐户管理后台、SMTP认证库、日志分析及显示、Web服务器、Php支持、防病毒软件、SMTP阶段反垃圾邮件工具、内容过滤器等多个组件。下面将对这些组件进行详细的...

    邮件服务器java

    Java的`java.util.logging`或第三方日志框架如Log4j可以帮助实现这个功能。 10. **扩展性**:优秀的邮件服务器应具备良好的模块化和扩展性,方便添加新功能或与其他系统集成。 在“Cheng_Mail备份”这个文件中,...

    postfix邮件服务器配置详解与错误解析

    6. **Cyrus SASL (Simple Authentication and Security Layer)** - 实现SMTP服务器的身份验证功能。 7. **Courier Authlib** - 提供带有身份验证的POP3服务器。 8. **Courier IMAP** - 支持POP3和IMAP协议,使得用户...

    postfix综合理解

    此外,Postfix支持SASL插件,可以与Cyrus或dovecot等身份验证服务集成,提供安全的认证机制。TLS加密(自2.2版开始支持)确保了邮件传输过程中的数据安全。Postfix还具备内容过滤器,允许在邮件传递之前进行内容检查...

    x86架构crontab离线rpm安装包以及依赖

    2. **rsyslog-5.8.10-12.el6.x86_64.rpm**:rsyslog是一个强大的系统日志守护进程,它可以收集、过滤、存储和转发系统日志。在`crontab`任务运行时,如果需要记录任务执行情况,rsyslog会扮演关键角色。 3. **cyrus...

    postfix-2.5.2.tar.gz

    - 与Amavis等防病毒/防垃圾邮件工具的集成:增加邮件过滤层。 8. **故障排查**: - 查看日志文件:错误信息通常在日志中能找到线索。 - 使用`postconf -n`查看当前生效的配置。 - 邮件传递问题:使用`postfix/...

    Djigzo指南

    邮件队列、日志记录、管理员角色、备份管理器以及SSL证书管理等都是Djigzo为提高邮件服务器的可操作性、安全性和稳定性所提供的附加功能。 在邮件队列方面,可以监控和管理邮件发送队列,日志记录则记录系统的各种...

    redhat邮件服务器设置.docx

    Cyrus SASL提供认证功能,确保只有授权用户能够访问邮件服务。OpenWebmail和Squirrelmail是两种Webmail服务,用户可以通过浏览器收发邮件,其中Squirrelmail是Red Hat默认提供的,而OpenWebmail是第三方选择。...

    Postfix 邮件系统搭建!

    Postfix邮件系统的搭建涉及多个环节,包括安全配置、反垃圾邮件策略、邮件过滤和日志分析等。这些内容可以根据实际需求进行深入学习和配置。在实际环境中,通常还会配合其他软件,如Dovecot(POP3/IMAP服务器)和...

    POSTFIX的安装与配置

    MDA如maildrop,用于处理POSTFIX投递的邮件,它支持过滤和高级功能。 ### 认证库 POSTFIX可以通过外部认证库增强安全性,如: - **courier-authlib**:用于courier-imap和maildrop的认证。 - **cyrus-sasl**:标准...

    ubuntu下postfix配置资料

    可以通过集成Amavisd-new、SpamAssassin和ClamAV等工具,实现邮件过滤功能。这些工具可以帮助检测并阻止垃圾邮件和病毒邮件。 7. **虚拟邮箱与多域支持** 如果需要为多个用户或域提供邮件服务,可以配置Postfix的...

    mqttfx-1.7.1-windows老版本,MQTT调试工具

    6. **日志记录**:MQTTFX 还提供了日志记录功能,帮助开发者追踪连接状态和通信过程,便于分析和调试。 7. **主题历史**:工具可以记录并显示订阅主题的历史消息,这对于追溯问题和分析数据流非常有用。 8. **多...

    postfix教程2

    3. **身份验证**:为了提高安全性,Postfix支持多种身份验证方法,如SMTP SASL认证,可以通过`smtpd_sasl_auth_enable`等参数开启,并配置相应的认证后台,如 Cyrus SASL 或 Dovecot SASL。 4. **反垃圾邮件**:...

    postfix邮局系统搭建全过程

    - 配置规则以过滤垃圾邮件和病毒邮件。 #### 六、测试与维护 1. **发送测试邮件** - 使用 `mail` 命令或其他工具发送测试邮件。 - 检查邮件是否能成功到达目标地址。 2. **性能监控** - 使用 RRDTool 等...

Global site tag (gtag.js) - Google Analytics