通过TCP/TLS套接字发送系统日志数据。
tls-syslog的Python项目详细描述
这个库允许通过tcp和tls发送syslog消息,类似于python的内置SysLogHandler如何通过udp发送日志行。由于tcp不像udp那样容易触发和忘记,所以这个库使用后台程序线程在后台发送日志行,而不阻塞主应用程序线程。但是,在发送队列中的所有日志行都已发送之前,主进程的关闭将被阻止。
安装
下面的文档假设您正在配置库以将日志发送到Papertrail,因为PaperTrail是支持TCP/TLS连接的常用rsyslog提供程序。同样的指令应该适用于任何TCP/TLS系统日志侦听器。
获取TLS CA证书
下载pem格式的syslog监听器的TLS certificates file,并将其保存到某个地方。例如:
curl -o /path/to/papertrail-bundle.pem https://papertrailapp.com/tools/papertrail-bundle.pem
不需要执行此步骤,因为您不打算验证侦听器的证书,但应该始终验证证书。否则,您最好继续使用udp上的syslog。
设置:django
下面的示例代码放在项目的settings.py文件中时,配置了django的日志框架。
importsslsyslog_host='logsX.papertrailapp.com'syslog_port=55555syslog_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的日志框架。
importlogging.configimportsslsyslog_host='logsX.papertrailapp.com'syslog_port=55555syslog_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的支持
- 添加对Python3.7的支持
- 从Sentry的旧sdk(Raven)迁移到他们的新sdk(Sentry sdk)。
0.1.3
- 通过更好地处理在打开Syslog收集器套接字时抛出的错误,提高了持久性。
0.1.2
- 修复日志行不总是通过套接字连接完全发送的问题,从而导致它们丢失。
- 在套接字发送工作线程出错时,通过[raven/sentry](https://docs.sentry.io/clients/python/)(如果已安装)添加更好的错误处理。
0.1.1
- 修复由于进程写时复制行为导致分叉进程无法记录的问题。
- 发生进程分叉后,先前创建的队列和守护进程线程将失效并重新创建(仅适用于子进程)。
- 使用进程PID检测何时发生分叉。
0.1.0
- 初次发布。