Skip to main content

Advanced Python Logging

Project description

Advanced Python Logging (APV)

Flexible & powerful logging solution for Python applications

Table of Contents

Introduction

APV emerged from a simple observation: despite the abundance of logging solutions, there's a glaring lack of standardization in application logging. As a developer deeply entrenched in Elasticsearch, AWS, and Graylog ecosystems, I found myself repeatedly grappling with inconsistent log formats and cumbersome integrations. APV is my response to this challenge – a logging library that doesn't aim to revolutionize the field, but rather to streamline it.

Requirements

  • Python 3.10+

Installation

From PyPI

# Basic installation
pip install apv

# With CloudWatch support
pip install apv[cloudwatch]

# With ECS logging support
pip install apv[ecs]

# With all optional dependencies
pip install "apv[cloudwatch,ecs]"

From Source

git clone https://github.com/acidvegas/apv
cd apv
pip install .

Features

  • Console Logging with Colors: Enhanced readability with colored log messages in the console.
  • File Logging: Write logs to files with support for log rotation based on size and number of backups.
  • Log Compression: Automatically compress old log files using gzip to save disk space.
  • JSON Logging: Output logs in JSON format for better structure and integration with log management systems.
  • ECS Logging: Output logs in ECS format for better integration with Elasticsearch
  • Detailed Log Messages: Option to include module name, function name, and line number in log messages.
  • Graylog Integration: Send logs to a Graylog server using GELF over UDP.
  • AWS CloudWatch Integration: Send logs to AWS CloudWatch Logs.
  • Customizable Logging Levels: Set the logging level to control verbosity.

Configuration Options

The setup_logging function accepts the following keyword arguments to customize logging behavior:

Name Default Description
level INFO The logging level. (DEBUG, INFO, WARNING, ERROR, CRITICAL)
date_format '%Y-%m-%d %H:%M:%S' The date format for log messages.
log_to_disk False Whether to log to disk.
max_log_size 10*1024*1024 (10 MB) The maximum size of log files before rotation (in bytes).
max_backups 7 The maximum number of backup log files to keep.
log_file_name 'app' The base name of the log file.
json_log False Whether to log in JSON format.
ecs_log False Whether to log in ECS format.
show_details False Whether to include module name, function name, & line number in log messages.
compress_backups False Whether to compress old log files using gzip.
enable_graylog False Whether to enable logging to a Graylog server.
graylog_host None The Graylog server host. (Required if enable_graylog is True)
graylog_port None The Graylog server port. (Required if enable_graylog is True)
enable_cloudwatch False Whether to enable logging to AWS CloudWatch Logs.
cloudwatch_group_name None The name of the CloudWatch log group. (Required if enable_cloudwatch is True)
cloudwatch_stream_name None The name of the CloudWatch log stream. (Required if enable_cloudwatch is True)

Usage

Basic Console Logging

import logging
import apv

# Set up basic console logging
apv.setup_logging(level='INFO')

logging.info('This is an info message.')
logging.error('This is an error message.')

Console Logging with Details

import logging
import apv

# Set up console logging with detailed information
apv.setup_logging(level='DEBUG', show_details=True)

logging.debug('Debug message with details.')

File Logging with Rotation

import logging
import apv

# Set up file logging with log rotation
apv.setup_logging(
    level='INFO',
    log_to_disk=True,
    max_log_size=10*1024*1024,  # 10 MB
    max_backups=5,
    log_file_name='application_log'
)

logging.info('This message will be logged to a file.')

File Logging with Compression and JSON Format

import logging
import apv

# Set up file logging with compression and JSON format
apv.setup_logging(
    level='DEBUG',
    log_to_disk=True,
    max_log_size=5*1024*1024,  # 5 MB
    max_backups=7,
    log_file_name='json_log',
    json_log=True,
    compress_backups=True
)

logging.debug('This is a debug message in JSON format.')

Graylog Integration

import logging
import apv

# Set up logging to Graylog server
apv.setup_logging(
    level='INFO',
    enable_graylog=True,
    graylog_host='graylog.example.com',
    graylog_port=12201
)

logging.info('This message will be sent to Graylog.')

AWS CloudWatch Integration

import logging
import apv

# Set up logging to AWS CloudWatch Logs
apv.setup_logging(
    level='INFO',
    enable_cloudwatch=True,
    cloudwatch_group_name='my_log_group',
    cloudwatch_stream_name='my_log_stream'
)

logging.info('This message will be sent to AWS CloudWatch.')

ECS Logging

import logging
import apv

# Set up ECS logging
apv.setup_logging(
    level='INFO',
    ecs_log=True
)

Mixing it all together

import logging
import apv

# Set up logging to all handlers
apv.setup_logging(
    level='DEBUG',
    log_to_disk=True,
    max_log_size=10*1024*1024,
    max_backups=7,
    log_file_name='app',
    json_log=True,
    compress_backups=True,
    enable_graylog=True,
    graylog_host='graylog.example.com',
    graylog_port=12201,
    enable_cloudwatch=True,
    cloudwatch_group_name='my_log_group',
    cloudwatch_stream_name='my_log_stream',
    show_details=True
)

Mirrors: acid.vegasSuperNETsGitHubGitLabCodeberg

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

apv-1.0.2.tar.gz (10.0 kB view details)

Uploaded Source

Built Distribution

apv-1.0.2-py3-none-any.whl (8.2 kB view details)

Uploaded Python 3

File details

Details for the file apv-1.0.2.tar.gz.

File metadata

  • Download URL: apv-1.0.2.tar.gz
  • Upload date:
  • Size: 10.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for apv-1.0.2.tar.gz
Algorithm Hash digest
SHA256 452ecb641afb0ba1cfc2b8e9d4fe6985b2c2ee325e1a4157e5e22c35c2690c5c
MD5 38d7ac26d044b7d636dba74900f4f6be
BLAKE2b-256 f6cbf93ac9e2953c19f92c5f5f4932465d9d18da7609af648f14dd2e7ffd6cc2

See more details on using hashes here.

File details

Details for the file apv-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: apv-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 8.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for apv-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 cd6547c484b75211f8f33123972cf934ff8a31136b11c29663f715c6d1508318
MD5 3a4dab3a79fa470f88ed9da68809d975
BLAKE2b-256 3d8b73ea695721fd1a81ad3fca73219ad6bb892f216db6d3871a5cf3b1f34c92

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