diff --git a/classes/pyrouser_mongo.py b/classes/pyrouser_mongo.py index ad6df40..ad2013a 100644 --- a/classes/pyrouser_mongo.py +++ b/classes/pyrouser_mongo.py @@ -1,12 +1,13 @@ -import logging from dataclasses import dataclass +from logging import Logger from typing import Union from bson import ObjectId from modules.database_mongo import col_users +from modules.logging_utils import get_logger -logger = logging.getLogger(__name__) +logger: Logger = get_logger(__name__) @dataclass diff --git a/classes/pyrouser_sqlite.py b/classes/pyrouser_sqlite.py index 8c3b27b..5929026 100644 --- a/classes/pyrouser_sqlite.py +++ b/classes/pyrouser_sqlite.py @@ -3,8 +3,9 @@ from dataclasses import dataclass from typing import Union from modules.database_sqlite import cursor +from modules.logging_utils import get_logger -logger = logging.getLogger(__name__) +logger: logging.Logger = get_logger(__name__) @dataclass diff --git a/locale/en.json b/locale/en.json index 35fb7d8..4725dff 100644 --- a/locale/en.json +++ b/locale/en.json @@ -10,6 +10,7 @@ }, "commands": { "start": "Start using the bot", + "shutdown": "Turn off the bot", "language": "Change bot's language", "remove_commands": "Unregister all commands" }, diff --git a/locale/uk.json b/locale/uk.json index 7304e8a..e33a712 100644 --- a/locale/uk.json +++ b/locale/uk.json @@ -9,6 +9,7 @@ }, "commands": { "start": "Почати користуватись ботом", + "shutdown": "Вимкнути бота", "language": "Змінити мову бота", "remove_commands": "Видалити всі команди" }, diff --git a/main.py b/main.py index faf7c6c..7e6e498 100644 --- a/main.py +++ b/main.py @@ -1,15 +1,16 @@ import contextlib -import logging +import logging.config from argparse import ArgumentParser -from os import getpid +from logging import Logger +from os import getpid, makedirs from pathlib import Path from sys import exit -from libbot.utils import config_get, json_read +from libbot.utils import json_read from classes.pyroclient import PyroClient - -# Main uses MongoDB implementation of DB +from modules.logging_utils import get_logging_config, get_logger +# Main uses MongoDB implementation of DB, # but you can also select SQLite one below # from modules.migrator_sqlite import migrate_database from modules.migrator_mongo import migrate_database @@ -22,13 +23,11 @@ from modules.scheduler import scheduler # from convopyro import Conversation -logging.basicConfig( - level=logging.DEBUG if config_get("debug") else logging.INFO, - format="%(name)s.%(funcName)s | %(levelname)s | %(message)s", - datefmt="[%X]", -) +makedirs(Path("logs/"), exist_ok=True) -logger = logging.getLogger(__name__) +logging.config.dictConfig(get_logging_config()) + +logger: Logger = get_logger(__name__) parser = ArgumentParser( prog="__name__", diff --git a/modules/logging_utils.py b/modules/logging_utils.py new file mode 100644 index 0000000..dd73b3a --- /dev/null +++ b/modules/logging_utils.py @@ -0,0 +1,37 @@ +from pathlib import Path +from typing import Any, Dict + +from libbot.utils import config_get + +import logging +from logging import Logger + + +def get_logging_config() -> Dict[str, Any]: + return { + "version": 1, + "disable_existing_loggers": False, + "handlers": { + "file": { + "class": "logging.handlers.RotatingFileHandler", + "filename": str(Path("logs/latest.log")), + "maxBytes": 500000, + "backupCount": 10, + "formatter": "simple", + }, + "console": {"class": "logging.StreamHandler", "formatter": "systemd"}, + }, + "formatters": { + "simple": { + "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s" + }, + "systemd": {"format": "%(name)s - %(levelname)s - %(message)s"}, + }, + "root": { + "level": "DEBUG" if config_get("debug") else "INFO", + "handlers": ["file", "console"], + }, + } + +def get_logger(name: str) -> Logger: + return logging.getLogger(name) \ No newline at end of file