Files
Nexus/2023/scripts/rigging_tools/ngskintools2/api/log.py
2025-11-24 08:27:50 +08:00

77 lines
1.8 KiB
Python

import logging
import sys
from ngSkinTools2.api.python_compatibility import Object
class DummyLogger(Object):
def __getattr__(self, name):
return self.doNothing
def doNothing(self, *args, **kwargs):
pass
def isEnabledFor(self, *args):
return False
def getLogger(self, name):
return self
class LogLineCountFilter(logging.Filter):
def __init__(self):
self.count = 1
def filter(self, record):
record.count = self.count
self.count = (self.count + 1) % 1000
return True
class SimpleLoggerFactory(Object):
ROOT_LOGGER_NAME = "ngSkinTools2"
def __init__(self, level=logging.DEBUG):
self.level = level
self.log = self.configureRootLogger()
def configureRootLogger(self):
logger = logging.getLogger(self.ROOT_LOGGER_NAME)
logger.setLevel(self.level)
logger.addFilter(LogLineCountFilter())
# logger.handlers = []
formatter = logging.Formatter("%(count)3d: [UI %(levelname)s %(filename)s:%(lineno)d] %(message)s")
formatter.datefmt = '%H:%M:%S'
for i in logger.handlers[:]:
logger.removeHandler(i)
ch = logging.StreamHandler(sys.__stdout__)
ch.setLevel(self.level)
ch.setFormatter(formatter)
logger.addHandler(ch)
logger.propagate = False
return logger
def getLogger(self, name):
return self.log
self.log.debug("creating logger '%s'" % name)
result = logging.getLogger(self.ROOT_LOGGER_NAME + "." + name)
result.setLevel(self.level)
result.info("alive check")
return result
import ngSkinTools2
currentLoggerFactory = DummyLogger() if not ngSkinTools2.DEBUG_MODE else SimpleLoggerFactory(level=logging.DEBUG)
def getLogger(name):
return currentLoggerFactory.getLogger(name)