Compare commits
No commits in common. "3afcfd585695743bd5bd2670696f424fac5313eb" and "f9943dc1c412ca7d36cda0689e0232800bb0e423" have entirely different histories.
3afcfd5856
...
f9943dc1c4
52
app/log.py
Executable file → Normal file
52
app/log.py
Executable file → Normal file
@ -1,54 +1,56 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/python3
|
||||||
# Standard library imports
|
# Standard library imports
|
||||||
import logging
|
import logging
|
||||||
import logging.config
|
|
||||||
import logging.handlers
|
import logging.handlers
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from traceback import print_exception
|
from traceback import print_exception
|
||||||
import yaml
|
|
||||||
|
|
||||||
# PyQt imports
|
# PyQt imports
|
||||||
|
|
||||||
# Third party imports
|
# Third party imports
|
||||||
|
import colorlog
|
||||||
import stackprinter # type: ignore
|
import stackprinter # type: ignore
|
||||||
|
|
||||||
# App imports
|
# App imports
|
||||||
from config import Config
|
from config import Config
|
||||||
|
|
||||||
|
|
||||||
class FunctionFilter(logging.Filter):
|
|
||||||
"""Filter to allow category-based logging to stderr."""
|
|
||||||
|
|
||||||
def __init__(self, functions: set[str]):
|
|
||||||
super().__init__()
|
|
||||||
self.functions = functions
|
|
||||||
|
|
||||||
def filter(self, record: logging.LogRecord) -> bool:
|
|
||||||
return (
|
|
||||||
getattr(record, "funcName", None) in self.functions
|
|
||||||
and getattr(record, "levelname", None) == "DEBUG"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class LevelTagFilter(logging.Filter):
|
class LevelTagFilter(logging.Filter):
|
||||||
"""Add leveltag"""
|
"""Add leveltag"""
|
||||||
|
|
||||||
def filter(self, record: logging.LogRecord) -> bool:
|
def filter(self, record: logging.LogRecord) -> bool:
|
||||||
# Extract the first character of the level name
|
# Extract the first character of the level name
|
||||||
record.leveltag = record.levelname[0]
|
record.leveltag = record.levelname[0]
|
||||||
# We never actually filter messages out, just add an extra field
|
|
||||||
# to the LogRecord
|
# We never actually filter messages out, just abuse filtering to add an
|
||||||
|
# extra field to the LogRecord
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
# Load YAML logging configuration
|
|
||||||
with open("app/logging.yaml", "r") as f:
|
|
||||||
config = yaml.safe_load(f)
|
|
||||||
logging.config.dictConfig(config)
|
|
||||||
|
|
||||||
# Get logger
|
|
||||||
log = logging.getLogger(Config.LOG_NAME)
|
log = logging.getLogger(Config.LOG_NAME)
|
||||||
|
log.setLevel(logging.DEBUG)
|
||||||
|
local_filter = LevelTagFilter()
|
||||||
|
|
||||||
|
# stderr
|
||||||
|
stderr = colorlog.StreamHandler()
|
||||||
|
stderr.setLevel(Config.LOG_LEVEL_STDERR)
|
||||||
|
stderr.addFilter(local_filter)
|
||||||
|
stderr_fmt = colorlog.ColoredFormatter(
|
||||||
|
"%(log_color)s[%(asctime)s] %(filename)s:%(lineno)s %(message)s", datefmt="%H:%M:%S"
|
||||||
|
)
|
||||||
|
stderr.setFormatter(stderr_fmt)
|
||||||
|
log.addHandler(stderr)
|
||||||
|
|
||||||
|
# syslog
|
||||||
|
syslog = logging.handlers.SysLogHandler(address="/dev/log")
|
||||||
|
syslog.setLevel(Config.LOG_LEVEL_SYSLOG)
|
||||||
|
syslog.addFilter(local_filter)
|
||||||
|
syslog_fmt = logging.Formatter(
|
||||||
|
"[%(name)s] %(filename)s:%(lineno)s %(leveltag)s: %(message)s"
|
||||||
|
)
|
||||||
|
syslog.setFormatter(syslog_fmt)
|
||||||
|
log.addHandler(syslog)
|
||||||
|
|
||||||
|
|
||||||
def log_uncaught_exceptions(type_, value, traceback):
|
def log_uncaught_exceptions(type_, value, traceback):
|
||||||
|
|||||||
@ -1,46 +0,0 @@
|
|||||||
version: 1
|
|
||||||
disable_existing_loggers: True
|
|
||||||
|
|
||||||
formatters:
|
|
||||||
colored:
|
|
||||||
(): colorlog.ColoredFormatter
|
|
||||||
format: "%(log_color)s[%(asctime)s] %(filename)s:%(lineno)s %(message)s"
|
|
||||||
datefmt: "%H:%M:%S"
|
|
||||||
syslog:
|
|
||||||
format: "[%(name)s] %(filename)s:%(lineno)s %(leveltag)s: %(message)s"
|
|
||||||
|
|
||||||
filters:
|
|
||||||
leveltag:
|
|
||||||
(): newlogger.LevelTagFilter
|
|
||||||
category_filter:
|
|
||||||
(): newlogger.FunctionFilter
|
|
||||||
functions: !!set
|
|
||||||
fb: null
|
|
||||||
|
|
||||||
handlers:
|
|
||||||
stderr:
|
|
||||||
class: colorlog.StreamHandler
|
|
||||||
level: INFO
|
|
||||||
formatter: colored
|
|
||||||
filters: [leveltag]
|
|
||||||
stream: ext://sys.stderr
|
|
||||||
|
|
||||||
syslog:
|
|
||||||
class: logging.handlers.SysLogHandler
|
|
||||||
level: DEBUG
|
|
||||||
formatter: syslog
|
|
||||||
filters: [leveltag]
|
|
||||||
address: "/dev/log"
|
|
||||||
|
|
||||||
debug_stderr:
|
|
||||||
class: colorlog.StreamHandler
|
|
||||||
level: DEBUG
|
|
||||||
formatter: colored
|
|
||||||
filters: [leveltag, category_filter]
|
|
||||||
stream: ext://sys.stderr
|
|
||||||
|
|
||||||
loggers:
|
|
||||||
musicmuster:
|
|
||||||
level: DEBUG
|
|
||||||
handlers: [stderr, syslog, debug_stderr]
|
|
||||||
propagate: false
|
|
||||||
@ -1,27 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
from newlogger import log
|
|
||||||
# Testing
|
|
||||||
def fa():
|
|
||||||
log.debug("fa Debug message")
|
|
||||||
log.info("fa Info message")
|
|
||||||
log.warning("fa Warning message")
|
|
||||||
log.error("fa Error message")
|
|
||||||
log.critical("fa Critical message")
|
|
||||||
print()
|
|
||||||
|
|
||||||
|
|
||||||
def fb():
|
|
||||||
log.debug("fb Debug message")
|
|
||||||
log.info("fb Info message")
|
|
||||||
log.warning("fb Warning message")
|
|
||||||
log.error("fb Error message")
|
|
||||||
log.critical("fb Critical message")
|
|
||||||
print()
|
|
||||||
|
|
||||||
|
|
||||||
def testing():
|
|
||||||
fa()
|
|
||||||
fb()
|
|
||||||
|
|
||||||
|
|
||||||
testing()
|
|
||||||
913
poetry.lock
generated
913
poetry.lock
generated
File diff suppressed because it is too large
Load Diff
@ -3,39 +3,36 @@ name = "musicmuster"
|
|||||||
version = "1.7.5"
|
version = "1.7.5"
|
||||||
description = "Music player for internet radio"
|
description = "Music player for internet radio"
|
||||||
authors = ["Keith Edmunds <kae@midnighthax.com>"]
|
authors = ["Keith Edmunds <kae@midnighthax.com>"]
|
||||||
package-mode = false
|
|
||||||
|
|
||||||
[tool.poetry.dependencies]
|
[tool.poetry.dependencies]
|
||||||
python = "^3.11"
|
python = "^3.11"
|
||||||
tinytag = "^1.10.1"
|
tinytag = "^1.10.1"
|
||||||
SQLAlchemy = "^2.0.37"
|
SQLAlchemy = "^2.0.36"
|
||||||
python-vlc = "^3.0.21203"
|
python-vlc = "^3.0.21203"
|
||||||
mysqlclient = "^2.2.7"
|
mysqlclient = "^2.2.5"
|
||||||
mutagen = "^1.47.0"
|
mutagen = "^1.47.0"
|
||||||
alembic = "^1.14.1"
|
alembic = "^1.14.0"
|
||||||
pydub = "^0.25.1"
|
pydub = "^0.25.1"
|
||||||
python-slugify = "^8.0.4"
|
python-slugify = "^8.0.4"
|
||||||
pyfzf = "^0.3.1"
|
pyfzf = "^0.3.1"
|
||||||
pydymenu = "^0.5.2"
|
pydymenu = "^0.5.2"
|
||||||
stackprinter = "^0.2.10"
|
stackprinter = "^0.2.10"
|
||||||
pyqt6 = "^6.8.0"
|
pyqt6 = "^6.7.1"
|
||||||
pyqtgraph = "^0.13.3"
|
pyqtgraph = "^0.13.3"
|
||||||
colorlog = "^6.9.0"
|
colorlog = "^6.9.0"
|
||||||
alchemical = "^1.0.2"
|
alchemical = "^1.0.2"
|
||||||
obs-websocket-py = "^1.0"
|
obs-websocket-py = "^1.0"
|
||||||
pygame = "^2.6.1"
|
pygame = "^2.6.1"
|
||||||
psutil = "^6.1.1"
|
psutil = "^6.1.0"
|
||||||
pyqt6-webengine = "^6.8.0"
|
pyqt6-webengine = "^6.7.0"
|
||||||
fuzzywuzzy = "^0.18.0"
|
fuzzywuzzy = "^0.18.0"
|
||||||
python-levenshtein = "^0.26.1"
|
python-levenshtein = "^0.26.1"
|
||||||
pyyaml = "^6.0.2"
|
|
||||||
types-pyyaml = "^6.0.12.20241230"
|
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
[tool.poetry.dev-dependencies]
|
||||||
ipdb = "^0.13.9"
|
ipdb = "^0.13.9"
|
||||||
pytest-qt = "^4.4.0"
|
pytest-qt = "^4.4.0"
|
||||||
pydub-stubs = "^0.25.1"
|
pydub-stubs = "^0.25.1"
|
||||||
line-profiler = "^4.2.0"
|
line-profiler = "^4.1.3"
|
||||||
flakehell = "^0.9.0"
|
flakehell = "^0.9.0"
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
[tool.poetry.group.dev.dependencies]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user