From 12602ac57ce57a6c17bdfc5db2284e84ae12a504 Mon Sep 17 00:00:00 2001 From: Untone Date: Thu, 18 Apr 2024 13:47:01 +0300 Subject: [PATCH] logger+fmt+isort --- CHANGELOG.txt | 3 ++ pyproject.toml | 2 +- resolvers/__init__.py | 1 - resolvers/chats.py | 1 - resolvers/load.py | 1 - resolvers/messages.py | 1 - server.py | 1 - services/auth.py | 3 +- services/core.py | 3 +- services/logger.py | 81 ++++++++++++++++++++++++++++++++++++++++++ services/presence.py | 10 +++--- services/rediscache.py | 3 +- services/schema.py | 1 - services/sentry.py | 4 +-- settings.py | 1 - 15 files changed, 96 insertions(+), 20 deletions(-) create mode 100644 services/logger.py diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 7a18ae5..a1ec9ad 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,3 +1,6 @@ +[0.3.2] +- added custom logger + [0.3.1] - glitchtip connect diff --git a/pyproject.toml b/pyproject.toml index de3c01f..8e9ee76 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "discoursio-inbox" -version = "0.3.1" +version = "0.3.2" description = "Inbox server for discours.io" authors = ["Tony Rewin "] diff --git a/resolvers/__init__.py b/resolvers/__init__.py index 1eb972b..9f4b2b9 100644 --- a/resolvers/__init__.py +++ b/resolvers/__init__.py @@ -8,7 +8,6 @@ from resolvers.messages import ( ) from resolvers.search import search_messages, search_recipients - __all__ = [ # inbox "load_chats", diff --git a/resolvers/chats.py b/resolvers/chats.py index fa71747..0286b97 100644 --- a/resolvers/chats.py +++ b/resolvers/chats.py @@ -9,7 +9,6 @@ from services.presence import notify_chat from services.rediscache import redis from services.schema import mutation - logger = logging.getLogger("[resolvers.chats] ") logger.setLevel(logging.DEBUG) diff --git a/resolvers/load.py b/resolvers/load.py index 5954418..cf89cbb 100644 --- a/resolvers/load.py +++ b/resolvers/load.py @@ -10,7 +10,6 @@ from services.core import CacheStorage from services.rediscache import redis from services.schema import query - logger = logging.getLogger("[resolvers.load] ") logger.setLevel(logging.DEBUG) diff --git a/resolvers/messages.py b/resolvers/messages.py index a0c3720..8e6fe96 100644 --- a/resolvers/messages.py +++ b/resolvers/messages.py @@ -8,7 +8,6 @@ from services.presence import notify_message from services.rediscache import redis from services.schema import mutation - logger = logging.getLogger("[resolvers.messages] ") logger.setLevel(logging.DEBUG) diff --git a/server.py b/server.py index 6c265db..5ba0092 100644 --- a/server.py +++ b/server.py @@ -3,7 +3,6 @@ from granian.server import Granian from settings import PORT - if __name__ == "__main__": print("[server] starting...") diff --git a/services/auth.py b/services/auth.py index 075ac74..30f66a7 100644 --- a/services/auth.py +++ b/services/auth.py @@ -5,10 +5,9 @@ from aiohttp import ClientSession from starlette.exceptions import HTTPException from services.core import get_author_by_user +from services.logger import root_logger as logger from settings import AUTH_URL - -logger = logging.getLogger("[services.auth] ") logger.setLevel(logging.DEBUG) diff --git a/services/core.py b/services/core.py index d8d08f5..bdb89cd 100644 --- a/services/core.py +++ b/services/core.py @@ -6,10 +6,9 @@ from typing import List import requests from models.member import ChatMember +from services.logger import root_logger as logger from settings import API_BASE - -logger = logging.getLogger("[services.core] ") logger.setLevel(logging.DEBUG) diff --git a/services/logger.py b/services/logger.py new file mode 100644 index 0000000..876a182 --- /dev/null +++ b/services/logger.py @@ -0,0 +1,81 @@ +import logging + +import colorlog + +# Define the color scheme +color_scheme = { + "DEBUG": "light_black", + "INFO": "green", + "WARNING": "yellow", + "ERROR": "red", + "CRITICAL": "red,bg_white", +} + +# Define secondary log colors +secondary_colors = { + "log_name": {"DEBUG": "blue"}, + "asctime": {"DEBUG": "cyan"}, + "process": {"DEBUG": "purple"}, + "module": {"DEBUG": "light_black,bg_blue"}, + "funcName": {"DEBUG": "light_white,bg_blue"}, # Add this line +} + +# Define the log format string +fmt_string = "%(log_color)s%(levelname)s: %(log_color)s[%(module)s.%(funcName)s]%(reset)s %(white)s%(message)s" + +# Define formatting configuration +fmt_config = { + "log_colors": color_scheme, + "secondary_log_colors": secondary_colors, + "style": "%", + "reset": True, +} + + +class MultilineColoredFormatter(colorlog.ColoredFormatter): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.log_colors = kwargs.pop("log_colors", {}) + self.secondary_log_colors = kwargs.pop("secondary_log_colors", {}) + + def format(self, record): + message = record.getMessage() + if "\n" in message: + lines = message.split("\n") + first_line = lines[0] + record.message = first_line + formatted_first_line = super().format(record) + formatted_lines = [formatted_first_line] + for line in lines[1:]: + formatted_lines.append(line) + return "\n".join(formatted_lines) + else: + return super().format(record) + + +# Create a MultilineColoredFormatter object for colorized logging +formatter = MultilineColoredFormatter(fmt_string, **fmt_config) + +# Create a stream handler for logging output +stream = logging.StreamHandler() +stream.setFormatter(formatter) + + +def get_colorful_logger(name="main"): + # Create and configure the logger + logger = logging.getLogger(name) + logger.setLevel(logging.DEBUG) + logger.addHandler(stream) + + return logger + + +# Set up the root logger with the same formatting +root_logger = logging.getLogger() +root_logger.setLevel(logging.DEBUG) +root_logger.addHandler(stream) + +ignore_logs = ["_trace", "httpx", "_client", "_trace.atrace", "aiohttp", "_client"] +for lgr in ignore_logs: + loggr = logging.getLogger(lgr) + loggr.setLevel(logging.INFO) diff --git a/services/presence.py b/services/presence.py index bdec2df..01be087 100644 --- a/services/presence.py +++ b/services/presence.py @@ -1,5 +1,7 @@ import json +from servies.logger import root_logger as logger + from models.chat import ChatUpdate, Message from services.rediscache import redis @@ -9,9 +11,9 @@ async def notify_message(message: Message, action="create"): data = {"payload": message, "action": action} try: await redis.publish(channel_name, json.dumps(data)) - print(f"[services.presence] ok {data}") + logger.info(f"ok {data}") except Exception as e: - print(f"Failed to publish to channel {channel_name}: {e}") + logger.error(f"Failed to publish to channel {channel_name}: {e}") async def notify_chat(chat: ChatUpdate, member_id: int, action="create"): @@ -19,6 +21,6 @@ async def notify_chat(chat: ChatUpdate, member_id: int, action="create"): data = {"payload": chat, "action": action} try: await redis.publish(channel_name, json.dumps(data)) - print(f"[services.presence] ok {data}") + logger.info(f"ok {data}") except Exception as e: - print(f"Failed to publish to channel {channel_name}: {e}") + logger.error(f"Failed to publish to channel {channel_name}: {e}") diff --git a/services/rediscache.py b/services/rediscache.py index 585ef7a..aee950d 100644 --- a/services/rediscache.py +++ b/services/rediscache.py @@ -2,10 +2,9 @@ import logging import redis.asyncio as aredis +from services.logger import root_logger as logger from settings import REDIS_URL - -logger = logging.getLogger("[services.redis] ") logger.setLevel(logging.DEBUG) diff --git a/services/schema.py b/services/schema.py index d3df586..f96e7fa 100644 --- a/services/schema.py +++ b/services/schema.py @@ -1,6 +1,5 @@ from ariadne import MutationType, QueryType - query = QueryType() mutation = MutationType() diff --git a/services/sentry.py b/services/sentry.py index 6cd401c..ad21d02 100644 --- a/services/sentry.py +++ b/services/sentry.py @@ -3,6 +3,7 @@ from sentry_sdk.integrations.ariadne import AriadneIntegration from sentry_sdk.integrations.redis import RedisIntegration from sentry_sdk.integrations.starlette import StarletteIntegration +from services.logger import root_logger as logger from settings import GLITCHTIP_DSN @@ -26,5 +27,4 @@ def start_sentry(): ], ) except Exception as e: - print("[services.sentry] init error") - print(e) + logger.error(e) diff --git a/settings.py b/settings.py index 024ab94..6d936c6 100644 --- a/settings.py +++ b/settings.py @@ -1,6 +1,5 @@ from os import environ - PORT = 8000 REDIS_URL = environ.get("REDIS_URL") or "redis://127.0.0.1" API_BASE = environ.get("API_BASE") or "http://127.0.0.1:8001/"