2012-02-03 16 views
15

Kiedy tworzę plik logu, chcę, aby nazwa zawierała datetime.Chcesz datetime w nazwie pliku logu

Teraz w Pythonie można uzyskać bieżącą datetime jako:

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

wersji str jest

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

Nie bardzo miły str dołączyć do nazwy pliku dziennika! Chciałbym, aby mój plik dziennika był podobny:

mylogfile_21_35_03_02_2012.log 

Czy jest coś, co może zrobić pyton, aby było to łatwe? uwaga, ja tworzę plik logu jako

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

Jakieś wskazówki?

+1

to prawdopodobnie było łatwo google. – jdi

+0

@jdi: "Prawdopodobnie"? – Johnsyweb

+0

Tytuł sprawia, że ​​się śmieję, na szczęście twoje pytanie jest dobre lub nie mam pojęcia, co oznacza "any any anytime" oznacza :) – Kekoa

Odpowiedz

21

Trzeba datetime.strftime() ta umożliwia formatowanie znacznika czasu przy wszystkich dyrektyw C's strftime(). W Twoim konkretnym przypadku:

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

Preferuję format daty i godziny w stylu ISO, ponieważ znacznie ułatwia sortowanie. – Johnsyweb

6

Tak. Zobacz interfejs API datetime, w szczególności strftime.

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

Można również użyć TimedRotatingFileHandler że zajmie datę i najazdu codziennie (lub kiedy chcesz) dla Ciebie.

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

domyślnie format będzie w zależności od przedziału dachowania:

System uratuje stare pliki dziennika przez dodanie rozszerzenia nazwy pliku. Rozszerzenia są oparte na dacie i godzinie, przy użyciu formatu strftime %Y-%m-%d_%H-%M-%S lub jego głównej części, w zależności od okresu najazdu.

Ale można modyfikować, że jak pokazał here, robiąc coś takiego:

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

+1. Po co wymyślać nowe koło, gdy Python wykonał już tak wspaniałą robotę! – Johnsyweb

+0

Lepsza odpowiedź niż zaakceptowana. –

+2

Działa tylko wtedy, gdy cron działa cały czas. – user2601010

0
from time import strftime 

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

Aby wydrukować hour, minutes, day, month i year, należy użyć następującego oświadczenia

od datetime import datetime

+0

Nie zapewnia to odpowiedzi na pytanie. Gdy masz już wystarczającą [reputację] (https://stackoverflow.com/help/whats-reputation), będziesz mógł [komentować dowolny wpis] (https://stackoverflow.com/help/privileges/comment); zamiast tego [dostarczaj odpowiedzi, które nie wymagają wyjaśnień od pytającego] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-zamiast). - [Z recenzji] (/ opinia/niskiej jakości-posts/18865507) – Sree

+0

To nie daje odpowiedzi na pytanie. Gdy masz już wystarczającą [reputację] (https://stackoverflow.com/help/whats-reputation), będziesz mógł [komentować dowolny wpis] (https://stackoverflow.com/help/privileges/comment); zamiast tego [dostarczaj odpowiedzi, które nie wymagają wyjaśnień od pytającego] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-zamiast). – rollstuhlfahrer

Powiązane problemy