2016-08-11 7 views
12

私はDjangoのドキュメントのアドバイスに従っており、このようにロギングを使用します。私の現在の構成でカスタマイズ

import logging 
logger = logging.getLogger(__name__) 

def today(...): 
    logger.info('Sun is shining, the weather is sweet') 

を、出力は次のようになります。

2016-08-11 14:54:06 mylib.foo.today: INFO Sun is shining, the weather is sweet 
私はこのようなログを使用することを変更することはできません

残念ながらいくつかのライブラリ:

import logging 

def third_party(...): 
    logging.info('Make you want to move your dancing feet') 

出力は、残念ながら李に見えますKEこの:

2016-08-09 08:28:04 other_lib.some_file.third_party: INFO Make you want to move your dancing feet 

違い::

root.third_party ==>other_lib.some_file.third_party

私が欲しい

2016-08-09 08:28:04 root.third_party: INFO Make you want to move your dancing feet 

私はこれを見たいですコードが012の代わりにlogging.info()を使用する場合、長いバージョン(rootではなく)を表示する

更新

これは、それの解決策であるため、Elegant setup of Python logging in Djangoの複製ではありません。各モジュールで引用

スタート、私は

を使用してロガーを定義します
logger = logging.getLogger(__name__) 

見積りの終了

いいえ、logger.info()の代わりにlogging.info()を使用する第三者コードは変更しません。彼らはあなたがしたい場合は、あなただけの

import logging 

logging.info("Hi! I'm the root logger!") 

を行うときに、デフォルトで得るものですルートロガーを(使用しているためだ

フォローアップの質問

Avoid logger=logging.getLogger(__name__) without loosing way to filter logs

+0

https://docs.djangoproject.com/en/1.9/topics/ロギング/あなたはsettings.pyでそれを設定する必要があります –

+0

[Elegant setup of Python loggi Djangoでng](http://stackoverflow.com/questions/1598823/elegant-setup-of-python-logging-in-django) –

+0

@be_good_do_goodはい、私はロギングを設定しました。疑問は: 'logger = logging.getLogger(__ name __)'で名前が付けられていないロガーを処理する方法 – guettli

答えて

4

Wayne Wernerが提案したように、私はLog Recordフォーマットオプションを使用します。ここに例があります。

ファイル1:external_module

import logging 
def third_party(): 
    logging.basicConfig(level=logging.DEBUG) 
    logger = logging.getLogger() 

    logger.info("Hello from %s!"%__name__) 

ファイル2:main

import external_module 
import logging 

logging.basicConfig(level=logging.DEBUG, 
        format='%(asctime)s %(module)s.%(funcName)s: %(levelname)s %(message)s') 
logger = logging.getLogger(__name__) 

def cmd(): 
    logger.info("Hello from %s!"%__name__) 
    external_module.third_party() 
cmd() 

出力:

2016-08-11 09:18:17,993 main.cmd: INFO Hello from __main__! 
2016-08-11 09:18:17,993 external_module.third_party(): INFO Hello from external_module! 
3

2つ(または3つ)のオプションが異なる場合は、Log Record format optionsを使用することをお勧めします。また、使用しているライブラリをサンクすることもできます。例えば

import logging 
import mod_with_lazy_logging 

mod_with_lazy_logging.logger = logging.getLogger(mod_with_lazy_logging.__name__) 

また、astを解析してログコードを書き換えることで、何か面倒なことが起きる可能性があります。しかし、しないでください。

+0

Monkeyライブラリにパッチを当てることができます。しかし、それはファイルがたくさんある...それはあまりにも多くの仕事のように感じる。 – guettli

+0

オープンソースライブラリの場合は、メンテナーに問題を提出するか、自分でPRを作成することをお勧めします。または両方。 'logger = logging.getLogger(__ name __)'を使用しないか、少なくとも ''ライブラリ名' 'を使用することは、怠惰な/無責任なようです。 –

関連する問題