2012-02-03 9 views
15

Cuando creo mi archivo de registro, deseo que el nombre contenga la fecha y hora.Quiere fecha y hora en el nombre del archivo de registro

Ahora, en Python se puede obtener la fecha y hora actual como:

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

La versión str es

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

un muy buen str para anexar al nombre de archivo de registro! Me gustaría que mi archivo de registro a ser algo así como:

mylogfile_21_35_03_02_2012.log 

¿Hay algo pitón puede hacer para hacer esto fácil de hacer? nota, estoy creando el archivo de registro como

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

¿Algún consejo?

+1

esto fue probablemente fácilmente en Google. – jdi

+0

@jdi: "Probablemente"? – Johnsyweb

+0

El título me hace reír, afortunadamente el cuerpo de tu pregunta es bueno o no tengo idea de lo que significa "anyold anytime" :) – Kekoa

Respuesta

21

Es necesario datetime.strftime(), esto permite dar formato a la fecha y hora utilizando todas las directivas de C's strftime(). En su caso específico:

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

Prefiero un formato de fecha y hora de estilo ISO ya que hace que la clasificación sea mucho más fácil. – Johnsyweb

6

Sí. Eche un vistazo a la API datetime, en particular strftime.

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

También es posible usar un TimedRotatingFileHandler que se encargará de la fecha y la renovación cada día (o siempre que lo desee) para usted.

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

Por defecto, el formato será en función del intervalo de vuelco:

El sistema guardará los archivos de registro antiguos añadiendo extensiones de nombre de archivo. Las extensiones se basan en la fecha y la hora, utilizando el formato strftime %Y-%m-%d_%H-%M-%S o una parte principal del mismo, dependiendo del intervalo de renovación.

Pero puede modificar que a medida que mostraron here, haciendo algo como:

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

+1. ¿Por qué reinventar la rueda cuando Python ya hizo un gran trabajo? – Johnsyweb

+0

Mejor respuesta que la aceptada. –

+2

Solo funciona si cron se ejecuta todo el tiempo. – user2601010

0
from time import strftime 

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

Para imprimir hour, minutes, day, month y year, utilice la siguiente instrucción

de datetime importación datetime

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

Esto no proporciona una respuesta a la pregunta. Una vez que tenga suficiente [reputación] (https://stackoverflow.com/help/whats-reputation) podrá [comentar cualquier publicación] (https://stackoverflow.com/help/privileges/comment); en su lugar, [brinde respuestas que no requieran aclaración del autor de la pregunta] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-instead). - [De la opinión] (/ review/low-quality-posts/18865507) – Sree

+0

Esto no proporciona una respuesta a la pregunta. Una vez que tenga suficiente [reputación] (https://stackoverflow.com/help/whats-reputation) podrá [comentar cualquier publicación] (https://stackoverflow.com/help/privileges/comment); en su lugar, [brinde respuestas que no requieran aclaración del autor de la pregunta] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-instead). – rollstuhlfahrer

Cuestiones relacionadas