我正在使用一个使用默认python日志系统的python应用程序。该系统的一部分是能够在日志配置文件中定义处理程序。这个应用程序的处理程序之一是django管理员电子邮件处理程序," django.utils.log.AdminEmailHandler"。当应用程序初始化日志记录系统时,它会调用logging.config.fileconfig。这是在后台线程上完成的,并尝试定期重新加载配置文件。我认为这很重要。
我已经通过python日志源代码追溯到方法:
def _resolve(name):
"""Resolve a dotted name to a global object."""
name = name.split('.')
used = name.pop(0)
found = __import__(used)
for n in name:
used = used + '.' + n
try:
found = getattr(found, n)
except AttributeError:
__import__(used)
found = getattr(found, n)
return found
在文件python2.7 / logging / config.py
中当给出此函数时,参数#d; django.utils.log.AdminEmailHandler"为了创建该处理程序,我的应用程序挂起了命令
__import__(used)
使用的是" django"。
我做了一些研究,我看到一些提及__import__不是线程安全的,并且避免在后台线程中使用它。这准确吗?并且知道__import __(" django")确实会导致死锁,我有什么办法可以阻止它吗?
答案 0 :(得分:1)
我建议使用默认的Django LOGGING
设置来控制日志记录。对于开发,如果更改了任何文件,则使用manage.py runserver
启动服务器将自动重新加载Django,包括具有日志记录配置的设置文件。在实践中它运作得很好!
https://docs.djangoproject.com/en/dev/topics/logging/#examples