Skip to content

Update logging for python firewall #7

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Jul 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions aikido_firewall/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,19 @@
Aggregates from the different modules
"""

from dotenv import load_dotenv

# Import sources
import aikido_firewall.sources.django
import aikido_firewall.sources.flask

# Import middleware
import aikido_firewall.middleware.django

# Import logger
from aikido_firewall.helpers.logging import logger

# Load environment variables
load_dotenv()

logger.info("Aikido python firewall started")
Empty file.
32 changes: 32 additions & 0 deletions aikido_firewall/helpers/logging.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
"""
Logging helper, this will create and set logging
"""

import logging
import sys
import os


APPLICATION_NAME = "aikido_firewall"

# Set log level
aikido_debug_env = os.getenv("AIKIDO_DEBUG")
LOG_LEVEL = logging.INFO
if aikido_debug_env is not None:
debug = aikido_debug_env.lower() in ["true", "1"]
LOG_LEVEL = logging.DEBUG if debug else logging.INFO

# Create a logger
logger = logging.getLogger(APPLICATION_NAME)

# Configure format
fmt = logging.Formatter("%(name)s: %(asctime)s | %(levelname)s > %(message)s")
# Get stdout handler
stdout = logging.StreamHandler(stream=sys.stdout)
stdout.setLevel(LOG_LEVEL)
stdout.setFormatter(fmt)
logger.addHandler(stdout)

# Configure logger
logger.setLevel(LOG_LEVEL)
logger.debug("Created logger")
8 changes: 4 additions & 4 deletions aikido_firewall/middleware/django.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
uses headers, body, etc. as sources
"""

import logging
from aikido_firewall.helpers.logging import logger


class AikidoMiddleware:
Expand All @@ -15,17 +15,17 @@ def __init__(self, get_response):
self.get_response = get_response

def __call__(self, request, *args, **kwargs):
logging.critical("[AIK] Aikido middleware : call")
logger.debug("Aikido middleware for `django` was called : __call__")
return self.get_response(request)

def process_exception(self, request, exception):
"""
Do something when an exception occurs whilst django is processing a request
"""
logging.critical("[AIK] Aikido middleware : exception")
logger.debug("Aikido middleware for `django` was called : process_exception")

def process_request(self, request):
"""
executed during the request phase of the Django request-response cycle.
"""
logging.critical("[AIK] Aikido middleware : request")
logger.debug("Aikido middleware for `django` was called : process_request")
4 changes: 3 additions & 1 deletion aikido_firewall/sources/django.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
"""

import importhook
from aikido_firewall.helpers.logging import logger


AIKIDO_MIDDLEWARE_ADDR = "aikido_firewall.middleware.django.AikidoMiddleware"

Expand All @@ -19,5 +21,5 @@ def on_django_import(django):

# pylint: disable=no-member
setattr(modified_django.settings, "MIDDLEWARE", new_middleware_array)
print("[AIK] Modified Django")
logger.debug("Wrapped `django` module")
return modified_django
9 changes: 4 additions & 5 deletions aikido_firewall/sources/flask.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

import copy
from importlib.metadata import version
import logging
import importhook
from aikido_firewall.helpers.logging import logger


class AikidoMiddleware: # pylint: disable=too-few-public-methods
Expand All @@ -17,7 +17,7 @@ def __init__(self, app):
self.app = app

def __call__(self, environ, start_response):
logging.critical("[AIK] Aikido middleware is working")
logger.debug("Aikido middleware for `flask` was called")
response = self.app(environ, start_response)
return response

Expand All @@ -35,11 +35,10 @@ def on_flask_import(flask):

def aikido_flask_init(_self, *args, **kwargs):
prev_flask_init(_self, *args, **kwargs)
print("[AIK] Flask version : ", version("flask"))
logger.debug("Wrapper - `flask` version : %s", version("flask"))
_self.wsgi_app = AikidoMiddleware(_self.wsgi_app)
print(_self)

# pylint: disable=no-member
setattr(modified_flask.Flask, "__init__", aikido_flask_init)
print("[AIK] Modified flask")
logger.debug("Wrapped `flask` module")
return modified_flask
6 changes: 6 additions & 0 deletions docs/logging.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Logging
Aikido by default uses the `INFO` logging level, if you want debug messages from aikido,
Set the `AIKIDO_DEBUG` environment variable. Like so :
```env
AIKIDO_DEBUG=True
```
16 changes: 15 additions & 1 deletion poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ readme = "README.md"
[tool.poetry.dependencies]
python = "^3.12"
importhook = "^1.0.9"
python-dotenv = "^1.0.1"

[tool.poetry.group.dev.dependencies]
black = "^24.4.2"
Expand Down
Loading