跳转到主要内容

通过TCP/TLS套接字发送syslog数据。

项目描述

build license kit format

这个库允许通过TCP和TLS发送syslog消息,类似于Python内置的SysLogHandler通过UDP发送日志行。由于TCP不像UDP那样是一次性操作,这个库使用守护线程在后台发送日志行,而不阻塞主应用程序线程。然而,主进程的关闭将被阻塞,直到发送队列中的所有日志行都已被发送。

安装

下面的文档假设您正在配置库以将日志发送到Papertrail,因为Papertrail是一个常用的支持TCP/TLS连接的rsyslog提供程序。相同的说明应该适用于任何TCP/TLS sys日志监听器。

获取TLS CA证书

下载syslog监听器的TLS证书文件(PEM格式)并保存在某个位置。例如

curl -o /path/to/papertrail-bundle.pem https://papertrailapp.com/tools/papertrail-bundle.pem

如果您不打算验证监听器的证书,则不需要此步骤,但您应该始终验证证书。否则,您还不如继续使用UDP上的syslog。

设置: Django

以下示例代码,当放置在您的项目settings.py文件中时,配置Django的日志框架。

import ssl

syslog_host = 'logsX.papertrailapp.com'
syslog_port = 55555
syslog_cert_path = '/path/to/papertrail-bundle.pem'

LOGGING = {
    'version': 1,
    'formatters': {
        'simple': {
            'format': '%(asctime)s django %(name)s: %(levelname)s %(message)s',
            'datefmt': '%Y-%m-%dT%H:%M:%S',
        },
    },
    'handlers': {
        'syslog': {
            'level': 'INFO',
            'class': 'tlssyslog.handlers.TLSSysLogHandler',
            'formatter': 'simple',
            'address': (syslog_host, syslog_port),
            'ssl_kwargs': {
                'cert_reqs': ssl.CERT_REQUIRED,
                'ssl_version': ssl.PROTOCOL_TLS,
                'ca_certs': syslog_cert_path,
            },
        },
    },
    'root': {
        'handlers': ['syslog'],
        'level': 'INFO',
    }
}

设置: 通用Python应用程序

以下示例代码配置Python的日志框架。

import logging.config
import ssl

syslog_host = 'logsX.papertrailapp.com'
syslog_port = 55555
syslog_cert_path = '/path/to/papertrail-bundle.pem'

logging.config.dictConfig({
    'version': 1,
    'formatters': {
        'simple': {
            'format': '%(asctime)s django %(name)s: %(levelname)s %(message)s',
            'datefmt': '%Y-%m-%dT%H:%M:%S',
        },
    },
    'handlers': {
        'syslog': {
            'level': 'INFO',
            'class': 'tlssyslog.handlers.TLSSysLogHandler',
            'formatter': 'simple',
            'address': (syslog_host, syslog_port),
            'ssl_kwargs': {
                'cert_reqs': ssl.CERT_REQUIRED,
                'ssl_version': ssl.PROTOCOL_TLS,
                'ca_certs': syslog_cert_path,
            },
        },
    },
    'root': {
        'handlers': ['syslog'],
        'level': 'INFO',
    }
})

变更日志

0.2.0

  • 添加对Django 2.1的支持

  • 添加对Python 3.7的支持

  • 从Sentry的旧SDK(raven)迁移到新SDK(sentry-sdk)。

0.1.3

  • 通过更好地处理打开syslog收集器套接字时抛出的OSErrors错误条件来提高持久性。

0.1.2

  • 修复了日志行未始终完全通过套接字连接发送的问题,导致它们丢失。

  • 在套接字发送工作线程中的错误时,通过[Raven/Sentry](https://docs.sentry.io/clients/python/)(如果已安装)增加了更好的错误处理。

0.1.1

  • 修复了由于进程复制写入行为,派生进程无法记录日志的问题。
    • 在进程派生发生后,先前创建的队列和守护线程被无效化并重新创建(仅针对子进程)。

    • 使用进程PID来检测何时发生派生。

0.1.0

  • 初始版本。

项目详情


下载文件

下载您平台对应的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

tls-syslog-0.2.0.tar.gz (8.3 kB 查看哈希)

上传日期

构建分发

tls_syslog-0.2.0-py3-none-any.whl (8.8 kB 查看哈希)

上传日期 Python 3

支持者: