2012-02-03 6 views
15

ログファイルを作成するときに、その名前にdatetimeが含まれるようにします。ログファイル名にdatetimeを指定する

さて、Pythonであなたは、現在の日時を取得することができます:

>>> from datetime import datetime 
>>> datetime.now() 
datetime.datetime(2012, 2, 3, 21, 35, 9, 559000) 

strのバージョンは

>>> str(datetime.now()) 
'2012-02-03 21:35:22.247000' 

ないログファイル名に付加する非常に素晴らしいstrのです!ログファイルを次のようにしたいとします:

mylogfile_21_35_03_02_2012.log 

これを簡単にするために何かできることはありますか?ログファイルを作成しています。

fh = logging.FileHandler("mylogfile" + datetimecomp + ".log") 

ヒントを教えてください。

+1

これはおそらく簡単に検出されました。 – jdi

+0

@jdi: "おそらく"? – Johnsyweb

+0

タイトルは私を笑わせます、幸いあなたの質問の体は良いですか、または私は "anyold anytime"が何を意味するかわかりません:) – Kekoa

答えて

21

、これはあなたがC's strftime()のディレクティブの全てを使用してタイムスタンプをフォーマットすることができます。あなたの特定のケースでは:

>>> datetime.now().strftime('mylogfile_%H_%M_%d_%m_%Y.log') 
'mylogfile_08_48_04_02_2012.log' 
+1

ソートをはるかに簡単にするため、ISOスタイルの日付/時刻形式を使用します。 – Johnsyweb

6

はい。 datetime API、特にstrftimeを見てください。あなたがdatetime.strftime()が必要

from datetime import datetime 
print datetime.now().strftime("%d_%m_%Y") 
24

また、あなたのために、毎日、日付とロールオーバーを処理(またはいつでも好きなときに)しますTimedRotatingFileHandlerを使用することができます。

from logging.handlers import TimedRotatingFileHandler 
fh = TimedRotatingFileHandler('mylogfile', when='midnight') 

デフォルトフォーマットはロールオーバー間隔に依存されます。システムは、ファイル名に拡張子を追加することによって、古いログファイルを保存します

。拡張は、ロールオーバー間隔に応じて、strftimeフォーマット%Y-%m-%d_%H-%M-%Sまたはその先頭部分を使用して、日付と時刻に基づいています。

しかし、あなたのようには以下のような何かをすることによって、hereを示したことが変更できます。

from logging.handlers import TimedRotatingFileHandler 
fh = TimedRotatingFileHandler('mylogfile', when='midnight') 
fh.suffix = '%Y_%m_%d.log' 
+4

+1。なぜPythonがすでにこのような素晴らしい仕事をしてきたのかを再考する必要があります。 – Johnsyweb

+0

受け入れられたものよりも良い答え。 –

+2

cronが常に実行されている場合にのみ動作します。 – user2601010

0
from time import strftime 

fh = logging.FileHandler(strftime("mylogfile_%H_%M_%m_%d_%Y.log")) 
-1

hourminutesdaymonthyearを印刷するには、次の文

を使用datetimeからのインポートdatetime

print datetime.now().strftime("%H_%M_%d_%m_%Y") 
+0

これは質問に対する答えを提供しません。十分な[評判](https://stackoverflow.com/help/whats-reputation)があれば、[投稿にコメントする]ことができます(https://stackoverflow.com/help/privileges/comment)。代わりに、[質問者からの明確化を必要としない回答を提供する](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- i-do-代わりに)。 - [レビューから](/レビュー/低品質の投稿/ 18865507) – Sree

+0

これは質問に対する回答ではありません。十分な[評判](https://stackoverflow.com/help/whats-reputation)があれば、[投稿にコメントする]ことができます(https://stackoverflow.com/help/privileges/comment)。代わりに、[質問者からの明確化を必要としない回答を提供する](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- i-do-代わりに)。 – rollstuhlfahrer