第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Python 中跨多個模塊的每個對象日志記錄

在 Python 中跨多個模塊的每個對象日志記錄

慕碼人8056858 2022-05-19 15:59:45
我有一個 Python 代碼,它實(shí)現(xiàn)了一個用于處理獨(dú)立數(shù)據(jù)集的類。對于每個數(shù)據(jù)集,我從類中實(shí)例化一個對象,該對象處理數(shù)據(jù)集。我想實(shí)現(xiàn)一個日志記錄功能,在控制臺和與每個數(shù)據(jù)集一起存儲的日志文件中顯示日志消息。我在模塊級別實(shí)現(xiàn)了一個根記錄器,并在創(chuàng)建每個對象時實(shí)現(xiàn)了一個帶有 FileHandler 的特定記錄器。它可以記錄課堂內(nèi)部發(fā)生的一些信息,但我也在使用另一個工具箱模塊,那里發(fā)生的事情只記錄在控制臺中,而不是記錄在日志文件中。為了說明這個問題,我實(shí)現(xiàn)了一個演示模塊:├──log│  ├── __init__.py│  ├── my_object.py│  ├── toolbox.py內(nèi)容__init__.py:import logginglogging.basicConfig(format='%(name)12s - %(levelname)5s - %(message)s')_log = logging.getLogger(__name__)_log.setLevel(logging.DEBUG)內(nèi)容my_object.py:import loggingfrom . import toolboxclass MyObject():    def __init__(self, name):        self._name = name        # configure logging        logger = logging.getLogger(name)        logger.setLevel(logging.DEBUG)        if logger.hasHandlers():            for hdlr in logger.handlers:                logger.removeHandler(hdlr)        handler = logging.FileHandler('/home/user/Desktop/test/{}.log'.format(name), mode='w', encoding='utf-8')        formatter = logging.Formatter('%(name)12s - %(levelname)5s - %(message)s')        handler.setFormatter(formatter)        logger.addHandler(handler)        self._logger = logger    def do_something(self):        self._logger.info('{} is doing something'.format(self._name))        toolbox.use_tool(self._name)內(nèi)容toolbox.py:import logging_log = logging.getLogger(__name__)def use_tool(name):    _log.info('Using some tool for {}'.format(name))然后,我運(yùn)行這個:import logfrom log.my_object import MyObjectobj = MyObject('object1')obj.do_something()這是我在控制臺中得到的:     object1 -  INFO - object1 is doing something log.toolbox -  INFO - Using some tool for object1這是我在/home/user/Desktop/test/object1.log文件中得到的:     object1 -  INFO - object1 is doing something如何讓 log.toolbox 也顯示在object1.log文件中?
查看完整描述

1 回答

?
千巷貓影

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個贊

罪魁禍?zhǔn)自谟谀闳绾握{(diào)用getLogger函數(shù)。你有兩次這樣做:

  1. logger = logging.getLogger(name)里面my_object.py

  2. _log = logging.getLogger(__name__)里面toolbox.py

如果您比較這些調(diào)用返回的對象,它們是 2 個獨(dú)立的對象(您可以通過 打印它們的地址print(id(obj)))。這就是為什么logger從不調(diào)用工具箱內(nèi)的行 - 那里有一個不同的記錄器(_log)!

要修復(fù)您的錯誤,只需為您的記錄器提供相同的名稱 - 例如“全局”:

  1. logger = logging.getLogger("global")

  2. _log = logging.getLogger("global")

該文件的輸出現(xiàn)在如下:

global -  INFO - object1 is doing something

global -  INFO - Using some tool for object1

在您的具體示例中,您可以將代碼調(diào)整toolbox.py為:


import logging



def use_tool(name):

    _log = logging.getLogger(name)

    _log.info('Using some tool for {}'.format(name))

并將記錄器留在里面my_object.py(logger = logging.getLogger(name))。如果您隨后在 中執(zhí)行以下操作main.py:


obj = MyObject('object1')

obj2 = MyObject('object2')

obj.do_something()

obj2.do_something()

你最終會得到 2 個日志文件:


對象1.log


object1 -  INFO - object1 is doing something

object1 -  INFO - Using some tool for object1

對象2.log


object2 -  INFO - object2 is doing something

object2 -  INFO - Using some tool for object2


查看完整回答
反對 回復(fù) 2022-05-19
  • 1 回答
  • 0 關(guān)注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號