2016-08-15 3 views
-2

をフィルタリングする方法を失うことなく、私は怠け者だとロギングを使用するすべてのpythonファイルに次の行を避けたい:避け `ロガー= logging.getLogger(__名前__)`ログ

logger = logging.getLogger(__name__) 

月に私がどのようにこれを尋ね完了し、答えを見つけました:Avoid `logger=logging.getLogger(__name__)`

残念なことに、回答には欠点があり、フィルターをかけることができません。

私は本当にこの無駄な余分な行を避けたいと思います。

例:

import logging 

def my_method(foo): 
    logging.info() 

残念ながら、私はlogging.info()は、このファイルの最初に呼び出された場合、暗黙的にlogger = logging.getLogger(__name__)を行うことは不可能だと思います。

不可能なものをする方法を知っている人がいますか?

更新

私はDon't Repeat Yourselfが好き。ほとんどのファイルが一番上に同じ行を含む場合、これは繰り返しだと思います。 WETのように見えます。私の頭の中のPythonインタープリタは、私がそこを見るたびにこの行をスキップする必要があります。私の主観的な感情:この行は無駄な肥大です。行は暗黙のデフォルトでなければなりません。

+0

モジュールの上部に* 1行*を定義するのは本当に難しいですか?すでに 'import logging'をタイプアウトしなければなりませんでした。 –

+0

@MartijnPieters私は「インポートロギング」をタイプしません。私はこれを行うIDEを持っています。メソッドに "logging。[MAGIC-KEY-STROKE]"と入力すると、IDEはimportステートメントを先頭に挿入します。はい、私はこの行を入力したくありません。それは膨らんでいる。私はより少ないコードを必要とします。 – guettli

+2

これは膨らんでいません。その名前のロガーオブジェクトが必要なことを明示的に宣言しています。パッケージでは、名前を気にしない場合、すべてのサブモジュールに対してそのロガーを再利用することができます。異なる階層の名前を簡単に使用できます。さらに、他のものはカスタム '__getattr__'を持つカスタムモジュールのサブクラスを必要とし、同じフレームを生成するためにグローバル内の' __name__'キーの呼び出しフレームをチェックします。 Pythonはそのような魔法をはっきりと表現しています。 –

答えて

1

本当にこれをやりたいのであれば、よく考えてみてください。

モジュールを作成します。

import logging 
import inspect 

def L(): 
    # FIXME: catch indexing errors 
    callerframe = inspect.stack()[1][0] 
    name = callerframe.f_globals["__name__"] 
    # avoid cyclic ref, see https://docs.python.org/2/library/inspect.html#the-interpreter-stack 
    del callerframe 
    return logging.getLogger(name) 

次に、あなたが行うことができます:このようなmagiclog.py

from magiclog import L 
L().info("it works!") 
+0

これは最初のステップのようです。これは、 'import logging'と' logging.info(それが動作します!) 'の場合に実行されます。 – guettli

+1

もちろん、ロギングモジュールの関数をmonkeypatchすることはできますが、悪い "領土。 (つまり、コードを継承している誰でも楽しい時間を過ごすことができます)。 –

1

私は怠け者だと ロギングを使用するすべてのpythonファイルに次の行を避けたい:

logger = logging.getLogger(__name__) 

これはお勧めの方法です:

ロガーを命名すると、次のように名前のロギングを使用して、各モジュール内のモジュールレベル ロガーを使用するときに使用するのは良い大会:

logger = logging.getLogger(__name__) 

これは、/ロガー名はパッケージを追跡することを意味モジュール階層、 イベントがロガー の名前からちょうどどこに記録されているのか直感的に分かります。

これは公式howtoからの引用です。

私は自分自身を繰り返してはいけません。ほとんどのファイルに同じ行がある場合は、これは繰り返しです。 WETのようです。私の頭のpython インタプリタは、私が を見るたびにこの行をスキップする必要があります。私の主観的な感情:この行は無駄な肥大です。行 は暗黙のデフォルトにする必要があります。

「明示的ではありませんより暗黙」です。とにかく、多くのIDEでpythonテンプレートを簡単に変更して、常にこの行を含めたり、新しいテンプレートファイルを作成したりすることができます。

+1

今はまったく違ったものですが、それほど深刻ではありません。数年前にアイロン掛けの靴下がおすすめです。すべての良い主婦がそれをしました。ほとんどの人はこれを全くやりませんでした。 – guettli

+1

私は99のプログラミング上の問題がありますが、ロギングセットアップのための明示的な1ライナーは1つではありません。それは私の無関心な返答です。 –

関連する問題