1

なるべく再開できるよう頑張ります。私が書いたこのクラスがあります:

ロギング クラス

import logging, logging.handlers.TimedRotatingFileHandler

class Logger(object):
    def __init__(self, log_filename):
        logging.basicConfig(format='%(asctime)s %(message)s')
        formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
        loghandler = TimedRotatingFileHandler(
            log_filename, when="midnight", backupCount=50
        )
        loghandler.setFormatter(formatter)
        self.logger = logging.getLogger()
        self.logger.setLevel(logging.INFO)
        self.logger.addHandler(loghandler)

    def getLogger(self):
        return self.logger

確かにうまく機能します。Logger インスタンスを使用するスクリプトがあり、そのスクリプト内で Logger も使用するクラスをインスタンス化すると、次のような問題が発生します。

脚本

import ClassA

A = ClassA()
log = Logger(log_filename='script_logger.log')
logger = log.getLogger()
logger.info('Initiated Script')

while True:
    logger.info('Looping')
    A.run()

私のクラスは次のようになります。

ClassA モジュール

class ClassA(object):
    def __init__(self):
        log = Logger(log_filename='class_logger.log')
        self.logger = log.getLogger()
        self.logger.info('Started ClassA')

    def run(self):
        self.logger.info('Into method run')

これで、2 つの別々のログ ファイルが作成されるはずですがclass_logger.logscript_logger.logそれは問題なく動作しますが、両方のファイルの内容は 1 行ずつまったく同じです。

したがってscript_logger.logclass_logger.log次のコンテンツがあります。

Started classA
Initiated Script
Looping
Into method run
Looping
Into method run
...

手がかりはありますか?

4

1 に答える 1