我写了一个子模块,在那里定义了日志记录,因为我主要使用我的子模块在不同的rest api项目中重用代码。如何设置自定义日志记录,以便日志记录知道哪个代码(main.py
或sub.py
)称为日志记录?我尝试使用__file__
,但是它总是会显示“ sub.py”。
我的子模块:
# sub.py
import logging
from secrets import token_urlsafe
# https://stackoverflow.com/a/57820456/1150923
def record_factory(*args,**kwargs):
record = old_factory(*args,**kwargs)
record.session_id = session_id
# What do I do here?
# This doesn't work:
record.src = __file__
return record
session_id = token_urlsafe(8)
logger = logging.getLogger(__name__)
old_factory = logging.getLogRecordFactory()
logging.setLogRecordFactory(record_factory)
# Always prepend session_id and src to logs
format = logging.Formatter("%(asctime)s %(session_id) %(src) %(message)s",datefmt="%Y-%m-%d %H:%M:%S")
handler = logging.StreamHandler()
handler.setformatter(format)
logger.addHandler(handler)
logger.info("Hello!") # Should also print out "sub.py".
我的主要脚本:
# main.py
import logging
import sub
logger = logging.getLogger("sub")
logger.info("Hi!") # Should also print out "main.py".