2013-12-16 11 views
14

は、ロギングチュートリアルからのログレコードのサンプルです:Python logging.Formatter():フィールドの幅を修正し、左か右に正当化する方法はありますか?ここ

2005-03-19 15:38:55,977 - simpleExample - DEBUG - debug message 
2005-03-19 15:38:55,979 - simpleExample - INFO - info message 
2005-03-19 15:38:56,054 - simpleExample - WARNING - warn message 
2005-03-19 15:38:56,055 - simpleExample - ERROR - error message 
2005-03-19 15:38:56,130 - simpleExample - CRITICAL - critical message 

この末尾のギザギザはありません最後に私を悩まします。

私は本当にこのようにフォーマットすることができるようにしたい:

2005-03-19 15:38:55,977 - simpleExample - DEBUG - debug message 
2005-03-19 15:38:55,979 - simpleExample -  INFO - info message 
2005-03-19 15:38:56,054 - simpleExample - WARNING - warn message 
2005-03-19 15:38:56,055 - simpleExample - ERROR - error message 
2005-03-19 15:38:56,130 - simpleExample - CRITICAL - critical message 

私は動作しません、私のロガー、(略しコード)のために次のことをしようとしました:

fmt = "{0:>8}" 
formatter = logging.Formatter("%(asctime)s %(filename)s: " + fmt.format("%(levelname)s") + " %(message)s", "%Y/%m/%d %H:%M:%S") 

この細かく実行され、常にレベル名が出力されますが、幅の形式は実装されません。

Ex。

logger.debug("testing debug message") 
logger.info("some random info") 
logger.critical("oh crap!") 

実際の結果:

2013/12/16 13:43:10 logtester: DEBUG testing debug message 
2013/12/16 13:43:10 logtester: INFO some random info 
2013/12/16 13:43:10 logtester: CRITICAL oh crap! 

所望の結果:

2013/12/16 13:43:10 logtester: DEBUG testing debug message 
2013/12/16 13:43:10 logtester:  INFO some random info 
2013/12/16 13:43:10 logtester: CRITICAL oh crap! 

logging.Formatterフィールドの固定幅を実現するために、任意のヒント()?

Python 2.6.9を使用しています。

EDIT:別の方法で使用して、第2の試み:

formatter = logging.Formatter("%(asctime)s %(filename)s: " + "%(foo)5s" % {"foo" : "(%(levelname)s)"} + " %(message)s", "%Y/%m/%d %H:%M:%S") 

はまだ、その結果:

2013/12/16 13:43:10 logtester: DEBUG testing debug message 
2013/12/16 13:43:10 logtester: INFO some random info 
2013/12/16 13:43:10 logtester: CRITICAL oh crap! 

たぶん私はちょうどboneheaded何かをやっています。

+0

可能な重複[右のPython logging.Formatterにレベルのフィールドを揃える方法](http://stackoverflow.com/questions/7771912/how-to-right- align-level-field-in-python-logging-formatter) –

答えて

16

フィールド幅は、型指定子の前に数を追加することで指定することができます。

>>> "%(foo)8s" % {'foo': 'bar'} 
'  bar' 

あなたがフォーマッタに渡されたあなたのフォーマット文字列でこれを使用することができます。あなたの例では、それはなるだろう:

"%(asctime)s %(filename)s: %(levelname)8s %(message)s" 
+0

これはFormatter()のパラメータとしては機能していないようです。 formatter = logging.Formatter( "%(asctime)s%(filename)s:" + "%(foo)5s"%{"foo": "(%(levelname)s)"} + "%(メッセージ)s "、"%Y /%m /%d%H:%M:%S ")の結果は同じです。 – CptSupermrkt

+0

あなたはフォーマット操作を自分で行うべきではありません。あなたが渡している文字列にフィールド幅の構文を使用するだけです。例えば。 '%(レベル名)8s'。 – Amber

+0

LOLそれはそれをしました。ありがとう! – CptSupermrkt

関連する問題