2016-09-22 3 views
1

時々私は%(funcName)sを使って、Pythonロギングフォーマッタを設定します。しかし、関数名が本当に長い場合、私はこれが気に入らない。Pythonログ `%(funcName)s`を使用しているときにロギングヘッダーを短縮できますか?

Pythonロギングを使用しているときにロギングヘッダーを短くすることはできますか?%(funcName)s?はいの場合、どうですか?

あなたは...合計文字数を10文字に制限してもいいですか?

+0

を与えますか? –

答えて

2

ログフォーマット文字列で%(...)sアイテムは%交換されている、とあなたは%(funcName).10s

などのような何かを行うことによって、文字列置換の長さを制限することができます

import logging 

logging.basicConfig(
    format='%(funcName).10s %(message)s', 
    level=logging.INFO, 
) 

logger = logging.getLogger() 

def short(): 
    logger.info("I'm only little!") 

def really_really_really_really_long(): 
    logger.info("I'm really long") 

short() 
really_really_really_really_long() 

あなたが改善したいいくつかのコードを投稿することができ

[email protected][17:54:01]:~$ p tmp_x.py 
short I'm only little! 
really_rea I'm really long 
+0

優雅な解決策のための小道具(私は文字列フォーマットの "。"を使用するとは思わなかった...浮動小数点 '%f'文字列フォーマットを行うときに文字列フォーマット機能を使用したことがあります)。 1つの追加: '%.10s'を'%10.10s'に変更すると、関数が短すぎると一定のサイズ10が得られます(ロギングヘッダーは一定の長さになります)。 –

+0

@TrevorBoydSmith知っておくと便利です。あなたは '%s'を使ってできることの全面的な文書を見つけることができましたか?私は本当にいくつかのドキュメントにリンクしたいと思いますが、私が見つけたページでは、 '%s'がオブジェクトに対して' str() 'を呼び出すだけで、修飾子についてはあまり言及していません。 –

+0

私は[あなたが探している正式なpythonドキュメントはこちらです](https://docs.python.org/2/library/string.html#formatspec)と思います。 (もしあなたがc-style printfを知っていれば、通常は同じことが適用されますが、Cは異なる言語ですので、構文はおそらくまったく同じではありません(構文の比較は別の時間の議論です)。 –

0

logging.formatterクラスを拡張して、以下のような目的のフォーマットを得ることができます。

これは単なる例です。 in_console = Falseの DEF のinit(自己): self.mod_width = 30 self.datefmt =「%のH:%のM:%Sあなたはあなたの条件 クラスMyFormatter(logging.Formatter)に基づいて、それを修正する必要があります「

def format(self, record): 
    s = [] 
    cmodule = record.module + ":" + str(record.lineno) 
    cmodule = cmodule[-self.mod_width:].ljust(self.mod_width) 
    format_str = ("%-7s %s %s" % (record.levelname, self.formatTime(record, self.datefmt), cmodule)) 
    pad_len = len(format_str) 
    for line in record_msg[1:]: 
     line = " " * pad_len + " : " + line 
     s.append(line) 

    s = "%s : %s" % (format_str, "\n".join(s)) 
    return s 

my_formatter = MyFormatter() 
log.setFormatter(my_formatter) 
関連する問題