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 を使用したりできることはわかっていますが、必要な管理コマンドとライブラリがいくつかあるため、これを行う必要なく機能するソリューションを見つけようとしています。それがうまくいくのが好きです。