Skip to content

Instantly share code, notes, and snippets.

@chiendo97
Created December 30, 2022 08:10
Show Gist options
  • Save chiendo97/113247711ac72f77698aff8dcd44f379 to your computer and use it in GitHub Desktop.
Save chiendo97/113247711ac72f77698aff8dcd44f379 to your computer and use it in GitHub Desktop.
python loguru filter level, log files, handle signle change default level
from __future__ import annotations
import signal
import sys
from types import FrameType
from typing import Optional
import loguru
from loguru import logger as _logger
_default_level = "INFO"
def _filter_level():
def filter_func(record: loguru.Record):
return record["level"].no >= _logger.level(_default_level).no
return filter_func
def _range_level():
def filter_func(record: loguru.Record):
return (
record["level"].no >= _logger.level(_default_level).no
and record["level"].no < _logger.level("ERROR").no
)
return filter_func
_logger.remove()
_logger.add(sys.stderr, filter=_filter_level())
_logger.add("logs/info.log", filter=_range_level())
_logger.add("logs/err.log", level="ERROR")
logger = _logger
def set_level(level: str):
global _default_level
_default_level = level
def handler(signum: int, frame: Optional[FrameType]):
if signum == signal.SIGUSR1:
set_level("INFO")
elif signum == signal.SIGUSR2:
set_level("DEBUG")
signal.signal(signal.SIGUSR1, handler)
signal.signal(signal.SIGUSR2, handler)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment