1

2 つの管理コマンドを備えた django アプリがあり、どちらも共通ライブラリを呼び出します。それらをsync_aおよびsync_bと呼びましょう。ログ エントリに呼び出し元の関数 (またはモジュール) を記録して、ログ メッセージが sync_a または sync_b からのものかどうかを確認したい

# sync_a.py
from utils.some_module import some_function
import logging
logger = logging.getLogger(__name__)

class Command(BaseCommand):
    some_function('a')

# sync_b.py
from utils.some_module import some_function
import logging
logger = logging.getLogger(__name__)

class Command(BaseCommand):
    some_function('a')

# some_module.py
def some_function(param):
    logger.info("running")

settings.py のログ設定は次のとおりです。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'formatters': {
        'semi_verbose': {
            'format': '[%(levelname)s] %(module)s %(name)s %(funcName)s(): %(message)s'
        },
    },
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
            'formatter': 'semi_verbose'
        }
    },
    'loggers': {
        'app': {
            'handlers': ['console'],
            'level': 'debug',
            'propagate': True
        }
    }
}

表示されるログ メッセージの形式は次のとおりです。

[INFO] utils.some_module some_function(): running

sync_a または sync_b のいずれかを含めてください。

私がやろうとしていることは珍しいことなのか、それとも設定が間違っていたのかはわかりません。log.info() 行をカスタマイズしてパラメーターを使用したり、inspect を使用したりできることはわかっていますが、必要な管理コマンドとライブラリがいくつかあるため、これを行う必要なく機能するソリューションを見つけようとしています。それがうまくいくのが好きです。

4

1 に答える 1

0

Python logging documentationLogRecordを見てみましたが、探している情報がキャプチャされているようには見えません。

Formatterこれを行う場合は、コール スタック情報を検索してロギング コールに追加できるカスタムを作成すると思います。これを行うには、 inspectモジュールのstack関数がおそらく最良の方法です。

于 2012-07-31T16:58:51.023 に答える