Python syslog.syslog vs SysLogHandler

Python syslog.syslog vs SysLogHandler,python,logging,syslog,Python,Logging,Syslog,我正在研究如何从Python应用程序中登录到syslog,我发现有两种方法: 使用例程 使用记录器模块 哪个是最好的选择,每个选项的优缺点等等,因为我真的不知道应该使用哪个。syslog.syslog()只能用于向本地syslogd发送消息SysLogHandler可以作为一个全面的、可配置的日志子系统的一部分使用,并可以登录到远程机器。日志模块是一个更全面的解决方案,它可以潜在地处理所有日志消息,并且非常灵活。例如,您可以为记录器设置多个处理程序,每个处理程序都可以设置为在不同级别上进行记录。

我正在研究如何从Python应用程序中登录到syslog,我发现有两种方法:

  • 使用例程
  • 使用记录器模块

  • 哪个是最好的选择,每个选项的优缺点等等,因为我真的不知道应该使用哪个。

    syslog.syslog()
    只能用于向本地syslogd发送消息
    SysLogHandler
    可以作为一个全面的、可配置的日志子系统的一部分使用,并可以登录到远程机器。

    日志模块是一个更全面的解决方案,它可以潜在地处理所有日志消息,并且非常灵活。例如,您可以为记录器设置多个处理程序,每个处理程序都可以设置为在不同级别上进行记录。您可以有一个SysLogHandler用于向syslog发送错误,一个FileHandler用于调试日志,还有一个SMTPHandler用于通过电子邮件将真正关键的消息发送给ops。您还可以在模块内定义记录器的层次结构,每个记录器都有自己的级别,因此您可以启用/禁用来自特定模块的消息,例如:

    import logging
    logger = logging.getLogger('package.stable_module')
    logger.setLevel(logging.WARNING)
    
    在另一个模块中:

    import logging
    logger = logging.getLogger('package.buggy_module')
    logger.setLevel(logging.DEBUG)
    

    这两个模块中的日志消息将根据级别发送到“包”记录器,并最终发送到您定义的处理程序。您还可以将处理程序直接添加到模块记录器中,以此类推。如果您已经关注了这么多,并且仍然感兴趣,那么我建议您跳转到日志记录以了解更多详细信息。

    到目前为止,在
    logging.handlers.SysLogHander
    中存在一个缺点,这一点尚未提及。也就是说,我不能设置诸如
    LOG\u ODELAY
    LOG\u NOWAIT
    LOG\u PID
    之类的选项。另一方面,
    LOG\u CONS
    LOG\u peror
    可以通过添加更多的处理程序来实现,并且默认情况下已经设置了
    LOG\u NDELAY
    ,因为当处理程序实例化时连接会打开。

    好吧,这不完全正确,您也可以将系统日志配置为将接收到的内容发送到远程系统日志服务器。这样做的好处是,不仅python应用程序的消息被发送到远程服务器,而且系统的每条消息都被发送到远程服务器,而且配置是独立于python程序完成的。我的答案仍然有效。是的,但我的意思是,使用syslog.syslog()还可以通过本地syslog服务器向远程syslog服务器发送消息,因此SysLogHandler并不一定比syslog.syslog()有优势。我与Juancho在一起:我正在设置一个RPi来进行实时感知,我想要所有的系统消息(不只是Python的消息)要发送到远程日志记录服务。因此,在这种情况下,使用<代码> SyLog.ySyrar()/代码>和配置Syslog服务最终是更全面的。请考虑这个博客帖子…我相信它提供了许多有价值的洞察力和POVS。@戴维,这是一个非常古老的帖子,它仍然是相关的吗?