2010-12-16 24 views
1

ロギングにPythonロギングモジュールを使用するJythonスクリプトがあります。あるマシンでは、スクリプトは正常にログを記録し、もう一方のログでは5時間後に移行します。おそらくこれはマシンがGMT-5にあることと関係があります。あなたはこの問題を引き起こす可能性があると思いますか?私はlog_format.converter機能を見てなかったJythonのロギングに時間が間違っています

log = logging.getLogger("my_log") 
log.setLevel(logging.DEBUG) 
handler = logging.handlers.RotatingFileHandler(
     log_file, 
     maxBytes=log_size, 
     backupCount=logs_count) 
log_format = logging.Formatter("%(asctime)s:%(levelname)s:%(message)s") 
handler.setFormatter(log_format) 
handler.setLevel(logging.DEBUG) 
log.addHandler(handler) 

:ここ

は、私は、ロギングオブジェクトを作成する方法です。問題のあるマシンで時間が正しく設定されていることを確認しました。そして、私はPythonのシェルでPythonが正しい時刻を出力していることを確認しました。

編集:私がtime.localtime()をPythonシェル(2.4.3)から見ると、正しいローカルタイム値を持つタプルが得られます。 Jythonスクリプト(2.5.2RC1)の中からtime.localtime()を見ると、GMTの時刻が表示されます。

+0

正しくログするマシンでGMTが使用されていますか? – Velociraptors

+0

はい、そうです:それはLinuxマシンで、UnixマシンはGMTを内部的に使用してから数学を行います。他のマシン...私は確信していません。私は/ etc/issuesから判断して、CentOSリリース5(最終版)を知っていることを意味しますが、私はそれが仮想化されていると思います。両方のマシンで、bashから 'date'を実行すると、正しい時刻が得られます。 – wilhelmtell

+0

また、 'log_format.converter = time.localtime'を明示的に設定してみました。 – wilhelmtell

答えて

1

私はこの問題を発見したと思います。どうやらJava自体が時間が間違っていたようだ。その理由は問題のマシンでJava用にタイムゾーンが正しく設定されていなかったからだ。 /etc/profile.d/java.shのexport TZ='US/East'が問題を解決しているようです。

シェルからdateを実行すると正しいローカル時刻とタイムゾーンの情報が出力されるため、これはわかりやすくなりました。 Pythonもタイムゾーンを正確に把握することができました。

ありがとうございました!

0

タイムスタンプをどこで取得してUTCであるかを確認し、タイムスタンプを渡す場所を確認して、実際にライブラリによってUTCとして解釈されていることを確認します。

+0

私は時間を手渡していません。すべての時間操作は、ロギングライブラリ内に完全に隠されています。私は各ログメッセージのフォーマットを指定してから、ログ記録を開始します。 – wilhelmtell

0

log_format.converterとは何ですか? documentationによると、既定値はtime.localtimeです。 time.gmtimeに変更すると、GMTがすべて使用されます。

+0

私はそれを変更していません。私が投稿したコードは、 'log_file'、' log_size'と 'logs_count'を別の場所から取得することとは別に、ロガーを設定するためのものです。 – wilhelmtell

+0

「time.gmtime」に変更しても問題ありませんか? – Velociraptors

関連する問題