下面是我的代码
logging.basicConfig(filename='logging2 text', level=logging.INFO,
format='%(levelname)s:%(message)s')
class Employee:
def __init__(self, firstname, lastname):
self.firstname = firstname
self.lastname = lastname
@property
def fullname(self):
return('{} {}'.format(self.firstname, self.lastname))
@property
def email(self):
return('{}@gmail.com'.format(self.fullname))
logging.info('Employee info:\nFullname: {}\nEmail: {}'.format(self.fullname, self.email))
emp1 = Employee('Joe', 'Mama')
当我运行该程序时,它会创建文件“logging2 test”,但它不记录任何日志,只记录一个空白文件,尽管我已经告诉程序在第 19 行记录日志,logging.info( '员工信息:\n全名:{}\n电子邮件:{}'.format(self.fullname, self.email))
确实需要一些解释。谢谢
最佳答案
有两个问题。您在return
后进行日志记录,因此永远不会到达日志行。
但是您的代码还包含无限递归。发生这种情况是因为它在 logging
行的 email
属性内部调用了 self.email
。
要解决这个问题,您需要知道记录日志时的电子邮件地址。
@property
def email(self):
email = '{}@gmail.com'.format(self.fullname)
logging.info('Employee info:\nFullname: {}\nEmail: {}'.format(self.fullname, email))
return(email)
这会将 email
设置为函数内部的变量,并在日志和返回语句中使用该变量。
然后,当您访问电子邮件属性时,日志行将按预期显示。
print(empl.email)
记录以下内容:
INFO:Employee info:
Fullname: Joe Mama
Email: Joe <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b2ffd3dfd3f2d5dfd3dbde9cd1dddf" rel="noreferrer noopener nofollow">[email protected]</a>
关于python - 我不明白python日志模块如何读取其执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65522139/