ドキュメントから:
class logging.Formatter(fmt = None、datefmt = None)
Formatterクラスの新しいインスタンスを返します。インスタンスは、メッセージ全体のフォーマット文字列と、メッセージの日付/時刻部分のフォーマット文字列で初期化されます。fmtが指定されていない場合、「%(message)s」が使用されます。datefmtが指定されていない場合は、ISO8601日付形式が使用されます。
また:
フォーマット文字列にが含まれている場合、'(asctime)'
はformatTime()
イベント時間をフォーマットするために呼び出されます。
したがって、を指定するか、独自のオーバーライドをdatefmt
使用してカスタムFormatter
サブクラスを作成できます。formatTime
また、現地時間とGMT時間(またはその他)のどちらかを選択する場合は、次のようにします。
デフォルトでは、time.localtime()が使用されます。特定のフォーマッタインスタンスに対してこれを変更するには、converter属性をtime.localtime()またはtime.gmtime()と同じシグニチャを持つ関数に設定します。すべてのフォーマッターで変更するには、たとえば、すべてのロギング時間をGMTで表示する場合は、Formatterクラスでconverter属性を設定します。
明示的なを使用していない場合は、引数format
とdatefmt
引数をに渡すこともできます。このように設定することはできませんが、デフォルトは現地時間であるため、設定する必要はありません。basicConfig
Formatter
converter
それで:
logging.basicConfig(format='%(asctime)s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
log = logging.getLogger(__name__)
log.error('Out of cheese!')
これを現地時間の16:11:30に実行したところ、出力は次のようになりました。
2013-01-08 16:11:30 Out of cheese!
実際、あなたがやろうとしているのは、標準時間形式からミリ秒をノックアウトすることだけのように見えます。これは、文字列を切り捨てるだけでさらに簡単に実行できます。
logging.basicConfig(format='%(asctime)-.19s %(message)s')
ただし、日付形式を明示的に指定する方が理にかなっていると思います。