Welcome to lowball-rabbitmq-logging-handler’s documentation!

Indices and tables

Overview

A lowball logging module that sends your microservice ecosystem logs to a rabbitmq service.

By default it uses the builtin lowball log formatter lowball.builtins.logging.formatter.DefaultFormatter but this can be changed if desired.

## Installation ### Using pip pip install lowball-rabbitmq-logging-handler

### From Source

Lowball Configuration

When configuring your lowball microservice, the logging section should be as follows. What is listed here is all defaults. You only need to add the key of an option if you wish to change the default value.

meta: ...
application: ...
auth_provider: ...
auth_db: ...
logging:
  level: DEBUG
  host: "127.0.0.1"
  port: 5672
  username: ""
  password: ""
  use_ssl: false
  verify_ssl: true
  ca_file: ""
  ca_path: ""
  exchange: "logs"
  environment: "default"
  service_name: "lowball"
  formatter_configuration:
    date_format: "%Y-%m-%d %H:%M:%S.%fUTC"

the log level should be either the integer level or the string level as outlined by this table

ref python

Level

Integer Value

CRITICAL

50

ERROR

40

WARNING

30

INFO

20

DEBUG

10

NOTSET

0

Python Logging does not care what the integer value entered is, but it does care that the string is one of these names.

### RabbitMQ Interaction The handler will establish a topic exchange within the targetted rabbitmq instance. The configuration fields of

  • exchange

  • environment

  • service_name

Directly correlate to the construction of the exchange and routing key.

the exchange is directly defined by the exchange field

The routing key will be constructed as follows

environment.service_name.log_level_of_record

for example, in the above default configuration, if a LogRecord was submitted with level WARNING, would be sent to the exchange logs with the routing key default.lowball.WARNING

Example Consumer

import pika
connection = pika.BlockingConnection(pika.ConnectionParameters("localhost"))
channel = connection.channel()
result = channel.queue_declare(queue="")
channel.exchange_declare(exchange="logs", exchange_type="topic")
channel.queue_bind(exchange="logs", queue=result.method.queue, routing_key="default.lowball.*")
def callback(ch, method, properties, body):
    print(f"routing_key: {method.routing_key}\nMessage: {body.decode()}")
channel.basic_consume(queue="", auto_ack=True, on_message_callback=callback)
channel.start_consuming()

log output when GET /builtins/status

routing_key: default.lowball.INFO
Message: {"name": "lowball", "msg": {"result": "200 OK"}, "args": [], "additional": {"user_agent": "curl/7.68.0", "src_ip": "127.0.0.1", "http_method": "GET", "url": "/builtins/status?", "status_code": 200, "client_data": {}}, "timestamp": "2021-10-26 13:56:00.010320UTC", "level": "INFO", "request_id": "f5c01744-fb7e-4bea-9f64-21f1e3e5924f"}

Example Usage

from lowball_rabbitmq_logging_handler import LowballRabbitMQLoggingHandler
from lowball import Lowball, require_admin

from lowball import config_from_file

app = Lowball(config=config_from_file("/path/to/config"), logging_handler=LowballRabbitMQLoggingHandler)