这是我15年编程生涯中遇到过的最棘手的问题之一。
该设置是一个部署的Django应用程序。我们有一项功能,允许用户邀请其他用户。
我遍历电子邮件地址列表。在循环的每次迭代中,我做了很多事情,以便在我们的系统中配置用户,向他们发送欢迎电子邮件,并在第三方系统中记录此事件。
循环体看起来像这样:
try:
# ... some other code ...
send_new_user_welcome_email(
user,
self.inviter,
temp_password,
welcome_message=welcome_message,
is_reviewer=True
)
analytics_record_event(
self.inviter,
EVENT_INVITED_USER,
invite_type='reviewer',
invited_email=email
)
record_customer_io_invited_someone(
self.inviter,
email
)
except:
logger.exception('While inviting user "%s"' % email)
我看到的问题是偶尔(大约每50次左右有人邀请一个或多个用户),analytics_record_event
函数似乎无法执行。它不会引起任何例外。它被简单地跳过,下一行执行。
为了诊断问题,我已将日志记录添加到analytics_record_event
函数,以便每次调用时都记录到文件中:
def analytics_record_event(user,
event_name,
skip_mixpanel=False,
skip_preact=False,
**properties):
username = user.username if hasattr(user, 'username') else user
logger.info(
u'analytics_record_event called for user %s and event "%s"' % (username, event_name)
)
我正在寻找关于如何做到这一点的想法。我已经花了很多时间研究这个问题,我的发现如下:
send_new_user_welcome_email
被召唤。我们的SMTP服务器日志确认电子邮件已关闭。内部电子邮件日志也会对此进行协作。record_customer_io_invited_someone
被召唤。外部系统中存在该用户的事件数据。u'analytics_record_event...
日志语句的条目,以查看失败的时间。在其他时候,当此函数执行正常(大多数时间)时,日志条目就在那里。except
语句的异常日志。 看起来偶尔,对analytics_record_event
的调用根本就没有。这让我非常悲痛。如果有人能为此提出调查路径,我将不胜感激。
答案 0 :(得分:0)
答案结果令人惊讶且非常平凡。
我正在追踪的代码是我正在处理的系统中标准用户创建过程的一部分。但是,有一个基于CSV文件的批量创建过程,它可以完成类似的工作。在此过程中没有调用analytics_record_event
。
未来的教训:
- 我认为我很聪明并且通过在analytics_record_event
上放置一个函数装饰器来覆盖很多地方。这样的结果让我更加困惑,导致这种绝望的请求帮助:)。如果我在这个特定函数中调用analytics_record_event
之前和之后添加了一个日志语句,我早就意识到它根本没有被调用! KISS在工作。