ログモジュールにいくつかのログにコンテキスト情報を追加しようとしています。ログの各行の隣にprojectidを表示できるようにする必要があります。毎日20,000を超えるプロジェクトが作成されているので、このデータは本当に役立ちます。これを行うため、私はlogging.Filterモジュールの派生物を作成しました。djangoのlogging.filtersに動的要素を追加する1.3
import logging
class MTFilter(logging.Filter):
def __init__(self, projectid=0):
self.projectid = projectid
def filter(self, record):
record.projectid = self.projectid
return True
ここに私のLOGGING変数は、settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'filters': {
'project': {
'()': 'app.proj.logging.mtfilter.MTFilter',
},
},
'formatters': {
'projectformat': {
'format': '%(asctime)s %(levelname)8s PID[%(projectid)d] %(name)s[%(funcName)s]: %(message)s',
},
},
'handlers': {
'null': {
'level': 'DEBUG',
'class': 'django.utils.log.NullHandler',
},
'project-log': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'projectformat',
'filename': os.path.join(SITE_ROOT, '../logs/django.log'),
'filters': ['project'],
'maxBytes': 1024*1024*16, #16Mb
},
},
'loggers': {
'': {
'handlers': ['null'],
'level': 'DEBUG',
'propagate': True,
},
'proj': {
'handlers': ['project-log'],
'level': 'DEBUG',
},
}
}
でだと私の見解で、私はLogging.filtersに 'PROJECTID' の任意の値を入れないことで
logger = logging.getLogger('proj')
logger.info('Log Message')
次を使用します.project私はデフォルトのフォーマット値を取得します。これは '0'です。ログ結果は以下のようになります。私が何をしたいのですがどのような
2011-07-26 02:41:44,488 INFO PID[0] proj[view]: Log Message
は例えば、動的に何とか「PROJECTID」の値をつかむです。ロガーオブジェクトを作成したり、いくつかのミドルウェアを使用していましたが、どうやってそれを行うのか分かりません。誰にでも提案はありますか?
です。自身のログは、ログにコンテキスト情報を追加するために多くの方法を提供しています、例えば、 'LoggingAdapter'かしかし、あなたがソースにアクセスできない(例えば、サードパーティ製のライブラリで)ロギングコールにコンテキスト情報を追加したい場合は、提案したアプローチがあります。 –