forked from LiveCarta/BookConverter
Improve logging
This commit is contained in:
29
consumer.py
29
consumer.py
@@ -10,27 +10,11 @@ from functools import partial
|
|||||||
from threading import Thread, active_count
|
from threading import Thread, active_count
|
||||||
|
|
||||||
from src.access import Access
|
from src.access import Access
|
||||||
|
from src.util.helpers import MainLogger
|
||||||
from src.docx_converter.docx_solver import DocxBook
|
from src.docx_converter.docx_solver import DocxBook
|
||||||
from src.epub_converter.epub_solver import EpubBook
|
from src.epub_converter.epub_solver import EpubBook
|
||||||
|
|
||||||
|
|
||||||
def configure_file_logger(name: str, filename: str = "logs/converter.log",
|
|
||||||
filemode: str = "w+", logging_level: int = logging.INFO) -> logging.Logger:
|
|
||||||
logger = logging.getLogger(name)
|
|
||||||
|
|
||||||
folder_path = os.path.dirname(os.path.abspath(__file__))
|
|
||||||
file_path = os.path.join(folder_path, filename)
|
|
||||||
|
|
||||||
file_handler = logging.FileHandler(file_path, mode=filemode)
|
|
||||||
logger.addHandler(file_handler)
|
|
||||||
|
|
||||||
file_format = logging.Formatter(fmt="%(asctime)s - %(levelname)s - %(message)s "
|
|
||||||
"[%(filename)s:%(lineno)d in %(funcName)s]")
|
|
||||||
file_handler.setFormatter(file_format)
|
|
||||||
logger.setLevel(logging_level)
|
|
||||||
return logger
|
|
||||||
|
|
||||||
|
|
||||||
def local_convert_book(book_type: [DocxBook, EpubBook], book_id: int, logger: logging.Logger, params: dict):
|
def local_convert_book(book_type: [DocxBook, EpubBook], book_id: int, logger: logging.Logger, params: dict):
|
||||||
logger.info(f"Start processing book-{book_id}.")
|
logger.info(f"Start processing book-{book_id}.")
|
||||||
try:
|
try:
|
||||||
@@ -88,7 +72,8 @@ def callback(ch, method, properties, body: bytes, logger: logging.Logger, libre_
|
|||||||
|
|
||||||
|
|
||||||
def server_run():
|
def server_run():
|
||||||
logger = configure_file_logger("consumer")
|
logger = MainLogger(name="consumer")
|
||||||
|
logger_object = logger.configure_main_logger()
|
||||||
channel = None
|
channel = None
|
||||||
try:
|
try:
|
||||||
folder_path = os.path.dirname(os.path.abspath(__file__))
|
folder_path = os.path.dirname(os.path.abspath(__file__))
|
||||||
@@ -112,17 +97,17 @@ def server_run():
|
|||||||
except TypeError as exc:
|
except TypeError as exc:
|
||||||
print("TypeError: problem with config, " + str(exc))
|
print("TypeError: problem with config, " + str(exc))
|
||||||
except ValueError as exc:
|
except ValueError as exc:
|
||||||
logger.log(logging.ERROR,
|
logger_object.log(logging.ERROR,
|
||||||
f"Queue {conf_param['queue']} is not declared.")
|
f"Queue {conf_param['queue']} is not declared.")
|
||||||
raise exc
|
raise exc
|
||||||
locker = Event()
|
locker = Event()
|
||||||
locker.set()
|
locker.set()
|
||||||
channel.basic_consume(queue=conf_param["queue"],
|
channel.basic_consume(queue=conf_param["queue"],
|
||||||
auto_ack=True,
|
auto_ack=True,
|
||||||
on_message_callback=partial(callback, logger=logger, libre_locker=locker))
|
on_message_callback=partial(callback, logger=logger_object, libre_locker=locker))
|
||||||
logger.info("Connection has been established.")
|
logger_object.info("Connection has been established.")
|
||||||
print("Waiting for messages...")
|
print("Waiting for messages...")
|
||||||
logger.info("Waiting for messages...")
|
logger_object.info("Waiting for messages...")
|
||||||
|
|
||||||
channel.start_consuming()
|
channel.start_consuming()
|
||||||
|
|
||||||
|
|||||||
@@ -28,9 +28,8 @@ class BookSolver:
|
|||||||
self.preset_path = None
|
self.preset_path = None
|
||||||
self.book_path = None # path to book file, appears after downloading from server
|
self.book_path = None # path to book file, appears after downloading from server
|
||||||
self.book_output_path = None # path to json file
|
self.book_output_path = None # path to json file
|
||||||
self.logger_object = BookLogger(name=f"{__name__}_{self.book_id}",
|
self.logger_object = BookLogger(name=f"{__name__}_{self.book_id}")
|
||||||
book_id=book_id,
|
self.logger_object.configure_book_logger(book_id=book_id)
|
||||||
main_logger=main_logger)
|
|
||||||
self.status_wrapper = BookStatusWrapper(
|
self.status_wrapper = BookStatusWrapper(
|
||||||
access, self.logger_object, book_id)
|
access, self.logger_object, book_id)
|
||||||
|
|
||||||
|
|||||||
@@ -80,9 +80,11 @@ class DocxBook(BookSolver):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
docx_file_path = f"../../books/docx/output.docx"
|
docx_file_path = f"../../books/docx/3cd6f561b8d7ee6a510c783784c9d018.docx"
|
||||||
logger_object = BookLogger(
|
|
||||||
name="docx", book_id=docx_file_path.split("/")[-1])
|
logger_object = BookLogger(name="epub")
|
||||||
|
logger_object.configure_book_logger(book_id=docx_file_path.split("/")[-1])
|
||||||
|
|
||||||
locker = Event()
|
locker = Event()
|
||||||
locker.set()
|
locker.set()
|
||||||
|
|
||||||
|
|||||||
@@ -52,9 +52,10 @@ class EpubBook(BookSolver):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
epub_file_path = "../../books/epub/9781634259804.epub"
|
epub_file_path = f"../../books/epub/9781614382264.epub"
|
||||||
logger_object = BookLogger(
|
|
||||||
name="epub", book_id=epub_file_path.split("/")[-1])
|
logger_object = BookLogger(name="epub")
|
||||||
|
logger_object.configure_book_logger(book_id=epub_file_path.split("/")[-1])
|
||||||
|
|
||||||
html_preprocessor = HtmlPresetsProcessor(
|
html_preprocessor = HtmlPresetsProcessor(
|
||||||
logger=logger_object, preset_path="../../presets/epub_presets.json")
|
logger=logger_object, preset_path="../../presets/epub_presets.json")
|
||||||
|
|||||||
@@ -27,10 +27,33 @@ class ColoredFormatter(logging.Formatter):
|
|||||||
return logging.Formatter.format(self, record)
|
return logging.Formatter.format(self, record)
|
||||||
|
|
||||||
|
|
||||||
class BookLogger:
|
class MainLogger:
|
||||||
def __init__(self, name: str, book_id: Union[int, str], main_logger: logging.Logger = None,
|
def __init__(self, name: str):
|
||||||
filemode: str = "w+", logging_level: int = logging.INFO,
|
self.main_logger = logging.getLogger(name)
|
||||||
logging_format: str = "%(asctime)s - %(levelname)s - %(message)s [%(filename)s:%(lineno)d in %(funcName)s]"):
|
|
||||||
|
def generate_file_path(self, filename: str):
|
||||||
|
folder_path = os.path.dirname(os.path.abspath(os.path.join(__file__ ,"../..")))
|
||||||
|
folder_path = os.path.join(folder_path, f"logs/{time.strftime('%d-%m-%Y_%H-00')}/")
|
||||||
|
if not os.path.exists(folder_path):
|
||||||
|
os.makedirs(folder_path)
|
||||||
|
file_path = os.path.join(folder_path, filename)
|
||||||
|
return file_path
|
||||||
|
|
||||||
|
def configure_main_logger(self, filemode: str = "w+", logging_level: int = logging.INFO) -> logging.Logger:
|
||||||
|
file_path = self.generate_file_path("converter.log")
|
||||||
|
|
||||||
|
file_handler = logging.FileHandler(file_path, mode=filemode)
|
||||||
|
self.main_logger.addHandler(file_handler)
|
||||||
|
|
||||||
|
logger_format = logging.Formatter(fmt="%(asctime)s - %(levelname)s - %(message)s "
|
||||||
|
"[%(filename)s:%(lineno)d in %(funcName)s]")
|
||||||
|
file_handler.setFormatter(logger_format)
|
||||||
|
self.main_logger.setLevel(logging_level)
|
||||||
|
return self.main_logger
|
||||||
|
|
||||||
|
|
||||||
|
class BookLogger(MainLogger):
|
||||||
|
def __init__(self, name: str):
|
||||||
"""
|
"""
|
||||||
Method for Logger configuration. Logger will write to file.
|
Method for Logger configuration. Logger will write to file.
|
||||||
Parameters
|
Parameters
|
||||||
@@ -49,29 +72,27 @@ class BookLogger:
|
|||||||
format of record in log file
|
format of record in log file
|
||||||
|
|
||||||
"""
|
"""
|
||||||
self.main_logger = main_logger
|
super().__init__(name)
|
||||||
self.logger = logging.getLogger(name)
|
self.book_logger = logging.getLogger(name)
|
||||||
self.logger.propagate = False
|
self.book_logger.propagate = False
|
||||||
|
|
||||||
folder_path = os.path.dirname(
|
def configure_book_logger(self, book_id: Union[int, str], filemode: str = "w+",
|
||||||
os.path.dirname(os.path.abspath(__file__)))
|
logging_level: int = logging.INFO):
|
||||||
folder_path = os.path.join(os.path.dirname(folder_path), f"logs/{time.strftime('%d-%m-%Y_%H-00')}/")
|
file_path = self.generate_file_path(f"{book_id}.log")
|
||||||
filename = f"{book_id}.log"
|
book_logger_format: str = "%(asctime)s - %(levelname)s - %(message)s" \
|
||||||
file_path = os.path.join(folder_path, filename)
|
" [%(filename)s:%(lineno)d in %(funcName)s]"
|
||||||
|
|
||||||
if not os.path.exists(folder_path):
|
|
||||||
os.makedirs(folder_path + time.strftime("%Y-%m-%_%H"))
|
|
||||||
file_handler = logging.FileHandler(file_path, mode=filemode)
|
file_handler = logging.FileHandler(file_path, mode=filemode)
|
||||||
|
self.book_logger.addHandler(file_handler)
|
||||||
file_format = logging.Formatter(logging_format)
|
file_format = logging.Formatter(book_logger_format)
|
||||||
file_handler.setFormatter(file_format)
|
file_handler.setFormatter(file_format)
|
||||||
self.logger.addHandler(file_handler)
|
|
||||||
|
|
||||||
stream_handler = logging.StreamHandler()
|
stream_handler = logging.StreamHandler()
|
||||||
stream_format = ColoredFormatter(logging_format)
|
stream_format = ColoredFormatter(book_logger_format)
|
||||||
stream_handler.setFormatter(stream_format)
|
stream_handler.setFormatter(stream_format)
|
||||||
self.logger.addHandler(stream_handler)
|
self.book_logger.addHandler(stream_handler)
|
||||||
self.logger.setLevel(logging_level)
|
|
||||||
|
self.book_logger.setLevel(logging_level)
|
||||||
|
|
||||||
def log(self, message: str, logging_level: int = 20):
|
def log(self, message: str, logging_level: int = 20):
|
||||||
"""
|
"""
|
||||||
@@ -81,10 +102,10 @@ class BookLogger:
|
|||||||
message: str
|
message: str
|
||||||
body of the message
|
body of the message
|
||||||
logging_level: int
|
logging_level: int
|
||||||
level of logging
|
level of logging
|
||||||
|
|
||||||
"""
|
"""
|
||||||
self.logger.log(msg=message, level=logging_level, stacklevel=2)
|
self.book_logger.log(msg=message, level=logging_level, stacklevel=2)
|
||||||
|
|
||||||
def log_error_to_main_log(self, message: str = ""):
|
def log_error_to_main_log(self, message: str = ""):
|
||||||
""" Method for logging error to main log file. """
|
""" Method for logging error to main log file. """
|
||||||
|
|||||||
Reference in New Issue
Block a user