Skip to main content

Python library for centralized log collecting

Provides simple configuration for collecting python logs to ELK stack via RabbitMQ.

Supported message flow is following:

python.logging
      ||
      \/
  logcollect
      ||
      \/
   RabbitMQ
      ||
      \/
   Logstash
      ||
      \/
 ElasticSearch
      ||
      \/
    Kibana

Mechanics

Native logging

logcollect.boot.default_config ensures that root logger has correctly configured amqp handler.

Django

logcollect.boot.django_dict_config modifies django.conf.settings.LOGGING to ensure correct amqp handler for root logger. It should be called in settings module after LOGGING definition.

Celery

logcollect.boot.celery_config adds signal handler for worker_process_init signal, and after that adds amqp handler to task_logger base handler. If necessary, root logger can be also attached to amqp handler.

Tips for configuration

Logstash

input {
  rabbitmq {
    exchange => "logstash"
    queue => "logstash"
    host => "rabbitmq-host"
    type => "amqp"
    durable => true
    codec => "json"
  }
}
output {
  elasticsearch { host => localhost }
  stdout { codec => rubydebug }
}

logcollect

All boot helpers have same parameters:

  • broker_uri - celery-style RabbitMQ connection string, i.e. amqp://guest@localhost//vhost

  • exchange, routing_key - message routing info for RabbitMQ

  • durable - message delivery mode

  • level - handler loglevel

  • activity_identity - dict with “process type info”

Activity Identity

Assuming we deployed two projects on same host: “github” and “jenkins”. Both have web backends and background workers. Activity identity helps to identify messages from these workers:

Project

Worker

Activity identity

github

backend

{"project": "github", "application": "backend"}

jenkins

background

{"project": "jenkins", "application": "background"}

loggername could be used for separating different parts of code within a worker. Hostnames and process PIDs are added automatically.

Correlation ID

Not supported yet, but idea is marking log messages about same object with ID information about this object.

Examples

Native python logging

python test_native/native_logging.py

Django

python test_django/manage.py test_log

Celery

First, start worker:

celery worker -A test_celery.app.celery

Then send a task to that worker:

python test_celery/send_task.py

Metadata

Release files for logcollect 0.14.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for logcollect 0.14.0
File Size Uploaded
logcollect-0.14.0.tar.gz 7.1 kB Details

Release files / logcollect-0.14.0.tar.gz

Download URL logcollect-0.14.0.tar.gz
Size 7.1 kB
Tags Source
SHA-256 checksum
How to use checksums
cf61aa098cc10ffadd65cc49879cd5de6bfd308197e094b4fa9001048dc259f0
BLAKE2b-256 checksum
How to use checksums
b6f88d50c5114611fc2d60492f533a7c95ff5ca86e326904d7683632492aed49
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.14.0 This release

1 release file

0.13.1

1 release file

0.13.0

1 release file

0.12.0

1 release file

0.11.0

1 release file

0.10.0

1 release file

0.9.4

0.9.1

1 release file

0.9.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page