我创建了一个自定义格式化程序,如here所述。
然后,我尝试使用以下代码将记录器及其初始化嵌入到一个单例中:
import logging
class _Logger:
_instance = None
def __init__(self):
self.logger = logging.getLogger("LeApp")
self.logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(CustomFormatter())
self.logger.addHandler(ch)
def Logger() -> _Logger:
if not _Logger._instance:
_Logger._instance = _Logger()
return _Logger._instance
def MYLOG(iMessage: str):
Logger().logger.info(iMessage)
def MYDBG(iMessage: str):
Logger().logger.debug(iMessage)
def MYWAR(iMessage: str):
Logger().logger.warning(iMessage)
def MYERR(iMessage: str):
Logger().logger.error(iMessage)
def CRITICAL(iMessage: str):
Logger().logger.critical(iMessage)但是现在,日志中显示的信息不是发出警告的行号和文件名,而是这个python文件的文件名/行号。
[2021-08-01 10:30:32,889.889] p42815 {Logger2.py:58} WARNING - Object was None日志库如何能够显示这些信息呢?
发布于 2021-08-01 09:14:25
从评论中的建议开始,这是我的解决方案:
import inspect
def getCaller() -> str:
aFrame = sys._getframe(2)
info = inspect.getframeinfo(aFrame)
return os.path.basename(info.filename) + ":" + str(info.lineno)
def MYLOG(iMessage: str):
Logger().logger.info(getCaller() + " - " + iMessage)https://stackoverflow.com/questions/68608810
复制相似问题