Skip to main content

Send syslog data over a TCP/TLS socket.

Project description

build license kit format

This library allows sending syslog messages over TCP and TLS, similar to how Python’s built-in SysLogHandler sends log lines over UDP. Since TCP isn’t fire-and-forget like UDP, this library uses a daemon thread to send log-lines in the background without blocking the main application thread. Shutdown of the main process, however, is blocked until all log lines in the send-queue have been sent.

Installation

The documentation below assumes you’re configuring the library to send logging to Papertrail, since Papertrail is a commonly used rsyslog provider that supports TCP/TLS connections. The same instructions should be applicable to any TCP/TLS syslog listener.

Obtain the TLS CA Certificates

Download the syslog listener’s TLS certificates file in PEM format and save it somewhere. For example:

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

This step isn’t needed is you aren’t planning to validate the listener’s certificate, but you should always validate the certificate. Otherwise, you might as well continue using syslog over UDP.

Setup: Django

The below sample code, when placed in your project’s settings.py file, configures Django’s logging framework.

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',
    }
}

Setup: Generic Python Application

The below sample code configures Python’s logging framework.

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',
    }
})

Changelog

0.2.0

  • Add support for Django 2.1

  • Add support for Python 3.7

  • Migrate from Sentry’s old SDK (raven) to their new SDK (sentry-sdk).

0.1.3

  • Improves durability by better handling error conditions involving OSErrors thrown when opening the syslog collector socket.

0.1.2

  • Fix issue where log lines weren’t always completely sent over the socket connection, causing them to be lost.

  • Adds better error handling via [Raven/Sentry](https://docs.sentry.io/clients/python/) (if installed) upon error in the socket send worker thread.

0.1.1

  • Fix issue with forked processes not being able to log due to process copy-on-write behavior.
    • After a process fork occurs, the previously created queue and daemon thread are invalidated and recreated (for the child process only).

    • Uses the process PID to detect when a fork has occurred.

0.1.0

  • Initial release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tls-syslog-0.2.0.tar.gz (8.3 kB view details)

Uploaded Source

Built Distribution

tls_syslog-0.2.0-py3-none-any.whl (8.8 kB view details)

Uploaded Python 3

File details

Details for the file tls-syslog-0.2.0.tar.gz.

File metadata

  • Download URL: tls-syslog-0.2.0.tar.gz
  • Upload date:
  • Size: 8.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/3.7

File hashes

Hashes for tls-syslog-0.2.0.tar.gz
Algorithm Hash digest
SHA256 dde46eac8437850c77954f8257f0092f9b8785a14b9343bbcff2cc52a6511e3d
MD5 24dfda462f4db2dd79f97366a2d72b67
BLAKE2b-256 8e0f9439f97f23679b6b4ac4d8a5270dd62d583858595a38a6ce278a57a718f5

See more details on using hashes here.

File details

Details for the file tls_syslog-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for tls_syslog-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 da057b858122f031d521a18b13d6ba7eff024e8c24c1accba50db94bacb5113e
MD5 01842ce198104b9c8c1e4926685117f3
BLAKE2b-256 73d86074a6112165cce466ad7d17265d8357b38ab099518766dc3aa2ff6f5ef8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page