print - Python logging y rotando archivos
python logging disable_existing_loggers (4)
Es posible que desee consultar WatchedFileHandler para implementar esto o, como alternativa, implementar la rotación de registros con RotatingFileHandler , ambos de los cuales se encuentran en el módulo logging.handlers .
Tengo un programa python que está escribiendo en un archivo de registro que está siendo rotado por el comando logrotate de Linux. Cuando esto suceda, debo indicar a mi programa que deje de escribir en el archivo anterior y comience a escribir en el nuevo. Puedo manejar la señal, pero ¿cómo le digo a Python que escriba en el nuevo archivo?
Estoy abriendo el archivo así:
logging.basicConfig(format=''%(asctime)s:%(filename)s:%(levelname)s:%(message)s'',filename=log_file, level=logging.INFO)
y escribiéndole así:
logging.log(level,"%s" % (msg))
Los módulos de registro se ven muy poderosos pero también abrumadores. Gracias.
No use logging.basicConfig
, use WatchedFileHandler
. Aquí es cómo usarlo.
import time
import logging
import logging.handlers
def log_setup():
log_handler = logging.handlers.WatchedFileHandler(''my.log'')
formatter = logging.Formatter(
''%(asctime)s program_name [%(process)d]: %(message)s'',
''%b %d %H:%M:%S'')
formatter.converter = time.gmtime # if you want UTC time
log_handler.setFormatter(formatter)
logger = logging.getLogger()
logger.addHandler(log_handler)
logger.setLevel(logging.DEBUG)
log_setup()
logging.info(''Hello, World!'')
import os
os.rename(''my.log'', ''my.log-old'')
logging.info(''Hello, New World!'')
Ya que la rotación ya está siendo realizada por logrotate
, en su controlador de señales, debe llamar de nuevo logging.basicConfig(...)
y eso debería volver a abrir el archivo de registro.
from logging import handlers
handler = handlers.TimedRotatingFileHandler(filename, when=LOG_ROTATE)
handler.setFormatter(logging.Formatter(log_format, datefmt="%d-%m-%Y %H:%M:%S"))
#LOG_ROTATE = midnight
#set your log format
Esto debería ayudarlo a manejar el registro giratorio.