5

settings.pyファイルを使用してログ行に変数を追加しようとしています。

これは設定(ロギング部分)のコードです:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'mail_admins': {
                        'level': 'CRITICAL',
                         'class': 'django.utils.log.AdminEmailHandler'
                        },

        'customhandler':{
                        'level':'DEBUG',
                        'class':'logging.RotatingFileHandler',
                        'formatter':'custom_format',
                        'filename':LOG_LOCATION
                        },
                 },

     'loggers': {
         'django.request': {
                        'handlers': ['mail_admins'],
                         'level': 'CRITICAL',
                        'propagate': True,
                            },
         'Logger_Custom1': {
                        'handlers':['customhandler'],
                        'level':'DEBUG',
                        'propagate':True
                           },
                 },

    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
                     },
         'simple': {
            'format': '%(levelname)s %(message)s'
                     },
         'custom_format':{
            'format':'[%(asctime)s %(levelname)s T:%(threadName)s F:%(funcName)s ] %(message)s '
                         },
                 }
}

上記のコードは正常に機能していますが、各ログメッセージの最後に変数を設定したいと思います。何かのようなもの:

MyVariable = "Somelines" 
[%(asctime)s %(levelname)s T:%(threadName)s F:%(funcName)s ] %(message)s 'MyVariable

したがって、私のログでは、各ログ行の最後にその変数の内容が含まれます。私は、このようなビュー関数内でそれを実行できることを知っています。logging.warning('% before you %','Look','Leap')しかし、そのためには、その行をどこにでも個別に含める必要があります。また、その変数名を追加または変更する必要がある場合は、すべてのファイルのすべての場所でその行を変更する必要があります。

そのため、settings.pyから直接それを行う方法があるかどうか疑問に思いました。そうすれば、1つの変更を加えることができ、それがすべてのログメッセージに適用されます。

4

2 に答える 2

3

私は自分で解決策を見つけました。これが良い習慣かどうかはわかりませんが、うまくいきます。

私がしたのは変数を割り当てることだけでした:

testvar = "MyVariable"

次に、次のようにこの変数を追加します。

'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s ' + testvar

出力には、ログエントリの変数がログ形式とマージされます。ありがとうございました。他に方法があれば教えてください。

于 2012-06-22T13:50:54.337 に答える
1

参照しているログ形式の文字列には、ロギングモジュールが提供するいくつかの変数があります。完全なリストはここにあります。基本的に、それはフォーマットのために辞書を文字列に渡します-そしてあなたはそのリストを操作することができません。代わりに、変数を実際の値としてフォーマット文字列内に直接「ハードコーディング」するか、設定ファイル内の変数内に値を格納して追加する必要があります。

'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s and look, custom stuff here!!!'

または..

custom = 'and look, custom stuff here!!!'
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s ' + custom
于 2012-06-22T15:33:43.323 に答える