4

プロジェクトにロギングを使用していますが、形式は次のとおりです。

'フォーマット':'%(asctime)s%(message)s'

しかし、時間は私の現地時間と同じではありませんでした。例えば

2013-01-08 11:04:07,383メッセージ(これはUTC-6時間です)

私は知りたいです

  1. 現地時間を使用してログに記録する方法
  2. 時間形式を2013-01-0811:04:07に変更する方法

私はそれを修正しました、問題は私がsetting.pyでタイムゾーンを設定する必要があるということです!!!

4

1 に答える 1

8

ドキュメントから:

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属性を設定します。

明示的なを使用していない場合は、引数formatdatefmt引数をに渡すこともできます。このように設定することはできませんが、デフォルトは現地時間であるため、設定する必要はありません。basicConfigFormatterconverter

それで:

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')

ただし、日付形式を明示的に指定する方が理にかなっていると思います。

于 2013-01-09T00:05:50.520 に答える