add logging config, related to #8
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import dataclasses as dc
|
||||||
import logging
|
import logging
|
||||||
import logging.handlers
|
import logging.handlers
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
@@ -21,33 +22,41 @@ NULL_HANDLER = logging.NullHandler()
|
|||||||
BASE_LOGGER = logging.getLogger("dopt_base")
|
BASE_LOGGER = logging.getLogger("dopt_base")
|
||||||
|
|
||||||
|
|
||||||
|
@dc.dataclass(eq=False, slots=True, kw_only=True)
|
||||||
|
class LoggingConfig:
|
||||||
|
enable_stderr: bool
|
||||||
|
enable_file: bool = False
|
||||||
|
logging_dir: Path | None = None
|
||||||
|
log_filename: str = LOG_FILENAME
|
||||||
|
file_max_bytes: int = 5_242_880
|
||||||
|
file_backup_count: int = 1
|
||||||
|
|
||||||
|
|
||||||
def setup_logging(
|
def setup_logging(
|
||||||
enable_stderr: bool,
|
config: LoggingConfig,
|
||||||
enable_file: bool = False,
|
|
||||||
logging_dir: Path | None = None,
|
|
||||||
log_filename: str = LOG_FILENAME,
|
|
||||||
) -> None:
|
) -> None:
|
||||||
# ** formatters
|
# ** formatters
|
||||||
logging.Formatter.converter = gmtime
|
logging.Formatter.converter = gmtime
|
||||||
LOGGER_ALL_FORMATER = logging.Formatter(fmt=LOG_FMT, datefmt=LOG_DATE_FMT)
|
LOGGER_ALL_FORMATER = logging.Formatter(fmt=LOG_FMT, datefmt=LOG_DATE_FMT)
|
||||||
# ** handlers
|
# ** handlers
|
||||||
if enable_stderr:
|
if config.enable_stderr:
|
||||||
logger_all_handler_stderr = logging.StreamHandler()
|
logger_all_handler_stderr = logging.StreamHandler()
|
||||||
logger_all_handler_stderr.setLevel(DEFAULT_LOGLEVEL_STDERR)
|
logger_all_handler_stderr.setLevel(DEFAULT_LOGLEVEL_STDERR)
|
||||||
logger_all_handler_stderr.setFormatter(LOGGER_ALL_FORMATER)
|
logger_all_handler_stderr.setFormatter(LOGGER_ALL_FORMATER)
|
||||||
else: # pragma: no cover
|
else: # pragma: no cover
|
||||||
logger_all_handler_stderr = NULL_HANDLER
|
logger_all_handler_stderr = NULL_HANDLER
|
||||||
|
|
||||||
if enable_file and logging_dir is None:
|
if config.enable_file and config.logging_dir is None:
|
||||||
raise ValueError("Logging path must be provided to write to log file")
|
raise ValueError("Logging path must be provided to write to log file")
|
||||||
elif enable_file:
|
elif config.enable_file:
|
||||||
assert logging_dir
|
if config.logging_dir is None:
|
||||||
log_file_path = logging_dir / log_filename
|
raise ValueError("Logging directory must be provided if file writing is selected")
|
||||||
|
log_file_path = config.logging_dir / config.log_filename
|
||||||
logger_all_handler_file = logging.handlers.RotatingFileHandler(
|
logger_all_handler_file = logging.handlers.RotatingFileHandler(
|
||||||
log_file_path,
|
log_file_path,
|
||||||
encoding="utf-8",
|
encoding="utf-8",
|
||||||
maxBytes=5_242_880,
|
maxBytes=config.file_max_bytes,
|
||||||
backupCount=1,
|
backupCount=config.file_backup_count,
|
||||||
delay=True,
|
delay=True,
|
||||||
)
|
)
|
||||||
logger_all_handler_file.setLevel(DEFAULT_LOGLEVEL_FILE)
|
logger_all_handler_file.setLevel(DEFAULT_LOGLEVEL_FILE)
|
||||||
|
|||||||
Reference in New Issue
Block a user