2012-06-21 12 views
5

settings.pyファイルを通して変数をログラインに追加しようとしています。Django:変数を設定ファイルに渡す

この設定のコード(伐採部分)されています

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つの変更を加えることができ、すべてのログメッセージに適用されます。

答えて

3

私は自分で解決策を見つけました。私はこれが良い習慣であるかどうかはわかりませんが、うまくいきます。ログフォーマットと合併

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

出力はあなたのログエントリ内の変数を持っています:

testvar = "MyVariable" 

そして、この変数を追加し、次のように:

私がしたすべての変数を割り当てました。 ありがとうございます。もっとやり方があるのか​​どうか教えてください。

+0

私は(ちょうど '%(メッセージ)S'後)、それは同様にあなたの実際のコードに役立つことを証明する書式文字列の末尾にスペースを追加しました!こうすることで、Djangoログメッセージとカスタムメッセージの間にスペースができます。 また、これは 'testvar'が文字列である限り有効です。文字列関数、つまり 'str(testvar)'でラップすることで、より堅牢にすることができます。 – Hannele

+0

ねえ、それは素晴らしいヒントです......ありがとう... –

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 
関連する問題