diff --git a/console.py b/console.py index 21e68b6..bfe530b 100644 --- a/console.py +++ b/console.py @@ -1,6 +1,7 @@ import logging import logging.config import re +from abc import ABC from dataclasses import asdict, dataclass from appdaemon.logging import AppNameFormatter @@ -40,11 +41,11 @@ console = Console( } ), log_time_format='%Y-%m-%d %I:%M:%S %p', - highlighter=RCHighlighter(), + # highlighter=RCHighlighter(), ) -class ContextSettingFilter(logging.Filter): +class ContextSettingFilter(logging.Filter, ABC): def filter(self, record: logging.LogRecord) -> logging.LogRecord: for name, val in asdict(self).items(): setattr(record, name, val) @@ -69,9 +70,9 @@ def create_rich_logging_dict(parent_room: str, typ: str = None): logger_name = f'AppDaemon.{parent_room}' if typ is not None: logger_name += f'.{typ}' - fmt = '[room]{room:>10}[/] [component]{component:<9}[/] {message}' + fmt = '[room]{room}[/] [component]{component}[/] {message}' else: - fmt = '[room]{room:>10}[/] {message}' + fmt = '[room]{room}[/] {message}' LOG_CFG = { 'version': 1, @@ -85,23 +86,25 @@ def create_rich_logging_dict(parent_room: str, typ: str = None): 'unmarkup': {'()': 'console.UnMarkupFilter'}, }, 'formatters': { - 'basic': {'style': '{', 'format': fmt, 'datefmt': '%H:%M:%S.%f'}, + 'rich': {'style': '{', 'format': fmt, 'datefmt': '%H:%M:%S.%f'}, 'err': { 'style': '{', - 'format': '{asctime}.{msecs:02.0f} {room} {message}', - 'datefmt': '%I:%M:%S', + 'format': '{asctime}.{msecs:03.0f} {levelname:8} {room:>10} {component:<9} {message}', + 'datefmt': '%Y-%m-%d %H:%M:%S', + # 'datefmt': '%H:%M:%S.%f', }, }, 'handlers': { logger_name: { 'filters': [logger_name], - 'formatter': 'basic', + 'formatter': 'rich', '()': 'rich.logging.RichHandler', 'markup': True, 'show_path': False, # 'show_time': False, 'omit_repeated_times': False, 'console': console, + 'highlighter': RCHighlighter(), }, 'stderr': { 'filters': [logger_name, 'unmarkup'], @@ -109,6 +112,15 @@ def create_rich_logging_dict(parent_room: str, typ: str = None): 'class': 'logging.StreamHandler', 'stream': 'ext://sys.stderr', }, + 'file': { + 'filters': [logger_name, 'unmarkup'], + 'class': 'logging.handlers.RotatingFileHandler', + 'filename': f'/logs/{parent_room}.log', + 'formatter': 'err', + 'mode': 'w', + 'maxBytes': 10**6, + 'backupCount': 3, + }, }, 'loggers': { logger_name: { @@ -116,6 +128,7 @@ def create_rich_logging_dict(parent_room: str, typ: str = None): 'propagate': False, 'handlers': [ logger_name, + 'file', # 'stderr' ], }