diff --git a/TwitchChannelPointsMiner/logger.py b/TwitchChannelPointsMiner/logger.py index 0faf7af..6b21f75 100644 --- a/TwitchChannelPointsMiner/logger.py +++ b/TwitchChannelPointsMiner/logger.py @@ -2,6 +2,7 @@ import logging import os import platform import queue +import pytz from datetime import datetime from logging.handlers import QueueHandler, QueueListener, TimedRotatingFileHandler from pathlib import Path @@ -63,6 +64,7 @@ class LoggerSettings: "less", "console_level", "console_username", + "time_zone", "file_level", "emoji", "colored", @@ -78,6 +80,7 @@ class LoggerSettings: less: bool = False, console_level: int = logging.INFO, console_username: bool = False, + time_zone: str or None = None, file_level: int = logging.DEBUG, emoji: bool = platform.system() != "Windows", colored: bool = False, @@ -90,6 +93,7 @@ class LoggerSettings: self.less = less self.console_level = console_level self.console_username = console_username + self.time_zone = time_zone self.file_level = file_level self.emoji = emoji self.colored = colored @@ -102,11 +106,26 @@ class LoggerSettings: class GlobalFormatter(logging.Formatter): def __init__(self, *, fmt, settings: LoggerSettings, datefmt=None): self.settings = settings + self.timezone = None + if settings.time_zone: + try: + self.timezone = pytz.timezone(settings.time_zone) + logging.info(f"Time zone set to: {self.timezone}") + except pytz.UnknownTimeZoneError: + logging.error(f"Invalid time zone: {settings.time_zone}") logging.Formatter.__init__(self, fmt=fmt, datefmt=datefmt) + def formatTime(self, record, datefmt=None): + if self.timezone: + dt = datetime.fromtimestamp(record.created, self.timezone) + else: + dt = datetime.fromtimestamp(record.created) + return dt.strftime(datefmt or self.default_time_format) + def format(self, record): record.emoji_is_present = ( - record.emoji_is_present if hasattr(record, "emoji_is_present") else False + record.emoji_is_present if hasattr( + record, "emoji_is_present") else False ) if ( hasattr(record, "emoji") @@ -138,7 +157,8 @@ class GlobalFormatter(logging.Formatter): return super().format(record) def telegram(self, record): - skip_telegram = False if hasattr(record, "skip_telegram") is False else True + skip_telegram = False if hasattr( + record, "skip_telegram") is False else True if ( self.settings.telegram is not None @@ -148,7 +168,8 @@ class GlobalFormatter(logging.Formatter): self.settings.telegram.send(record.msg, record.event) def discord(self, record): - skip_discord = False if hasattr(record, "skip_discord") is False else True + skip_discord = False if hasattr( + record, "skip_discord") is False else True if ( self.settings.discord is not None @@ -180,7 +201,8 @@ def configure_loggers(username, settings): console_handler.setFormatter( GlobalFormatter( fmt=( - "%(asctime)s - %(levelname)s - [%(funcName)s]: " + console_username + "%(message)s" + "%(asctime)s - %(levelname)s - [%(funcName)s]: " + + console_username + "%(message)s" if settings.less is False else "%(asctime)s - " + console_username + "%(message)s" ), @@ -208,16 +230,19 @@ def configure_loggers(username, settings): delay=False, ) else: + # Getting time zone from the console_handler's formatter since they are the same + tz = "" if console_handler.formatter.timezone is False else console_handler.formatter.timezone logs_file = os.path.join( logs_path, - f"{username}.{datetime.now().strftime('%Y%m%d-%H%M%S')}.log", + f"{username}.{datetime.now(tz).strftime('%Y%m%d-%H%M%S')}.log", ) file_handler = logging.FileHandler(logs_file, "w", "utf-8") file_handler.setFormatter( - logging.Formatter( + GlobalFormatter( fmt="%(asctime)s - %(levelname)s - %(name)s - [%(funcName)s]: %(message)s", datefmt="%d/%m/%y %H:%M:%S", + settings=settings ) ) file_handler.setLevel(settings.file_level) diff --git a/requirements.txt b/requirements.txt index 5a011c2..51a1e42 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,3 +9,4 @@ colorama flask irc pandas +pytz diff --git a/setup.py b/setup.py index 30afcec..3feebfa 100644 --- a/setup.py +++ b/setup.py @@ -36,7 +36,8 @@ setuptools.setup( "colorama", "flask", "irc", - "pandas" + "pandas", + "pytz" ], long_description=read("README.md"), long_description_content_type="text/markdown",