python - 我不明白python日志模块如何读取其执行代码

标签 python python-3.x logging module

下面是我的代码


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/

相关文章:

python - 如何在 TensorFlow 图中添加 if 条件?

python - 在opencv python中分解单应矩阵

python - 如何根据三列中的顺序将三列合并为一列

java - 如何记录错误级别为ERROR的消息

git - 在 IntelliJ 中重构时如何将更改日志保存在 git 文件中?

python - numpy 排序奇怪的行为

Python 图像处理线程

python - 当应该影响 X 的变量发生变化时,变量 X 不更新

python - 导入错误 : No module named site

sql-server - 为什么 SQL Server 会让数据库卡在 DATABASE_SNAPSHOT_CREATION 中?