0

これは私のモジュールです:

# module.py
import logging

logging.basicConfig(filename='app.log')

logger = logging.getLogger(__name__) 

def method(x):
    logger.info('x is %s', x)
    return x + x

私のモジュールはサードパーティのスクリプトによって使用されています。問題は、私のモジュール上書きするいくつかのログ設定を行ったことです。

# main.py
import logging
from logging.config import dictConfig
from module import method

logger = logging.getLogger(__name__) 

def setup_loghandlers():
    dictConfig({
        "version": 1,
        "disable_existing_loggers": False,

        "handlers": {
            "console": {
                "level": "DEBUG",
                "class": "logging.StreamHandler"
            },
        },

        "root": {
            "handlers": ["console"],
            "level": "INFO",
        }
    })

setup_loghandlers()

y = method(20)
logger.info('y is %s', y)

を実行するmain.pyと、すべてのログがコンソールに表示されますが、実際に必要なのは module.py のログが app.log ファイルに移動することです

PS: は変更できません。変更できるmain.pyのは自分のmodule.py

4

1 に答える 1

2

モジュールはロガー自体を構成するべきではありません (実行コンテキストに関する十分な知識がないため)。これは、モジュールの責任を使用して s. 並行アプリで使用されるモジュールがすべて同時に同じファイルに書き込もうとしたり、ディスク容量が制限されている (またはディスク容量がまったくない) デバイスで実行されているとどうなるかを考えてみてください。

簡単に言うと、「main.py を変更できない」場合は、「main.py」の所有者に (彼が適切と考える方法で) そうするように依頼し、必要に応じてが構成したものにアクセスできるようにします。何でもデバッグできるようにします。彼がそうしなければ、それはもうあなたの問題ではありません。

于 2013-09-30T15:39:05.583 に答える