I'm trying to make a log per day in python3 using logging module.
I'm aware of the TimedRotatingFileHandler module but it doesn't work as I need, it stores the data in a fixed name file and renamed it based on a suffix.
I need to define the log filename for each message based on the date.
What I implemented does not work. The logfile is created with the right name, but next day, the new one is not created and logs still get written in the old file.
Here is what I do:
import logging ,coloredlogs,platform
import sys,os
from datetime import datetime
FORMATTER = logging.Formatter("%(asctime)s : %(hostname)s : %(name)s : %(levelname)s : %(message)s")
LOG_FILE = os.environ['RMQ_DISPACHER_LOGFILE']
NICKNAME = os.environ['LOGNICKNAME']
class HostnameFilter(logging.Filter):
hostname = platform.node()
def filter(self, record):
record.hostname = HostnameFilter.hostname
return True
def get_console_handler():
console_handler = logging.StreamHandler(sys.stdout)
console_handler.addFilter(HostnameFilter())
console_handler.setFormatter(FORMATTER)
return console_handler
def get_file_handler():
file_handler = logging.FileHandler( "%s/%s_%s.log" % (LOG_FILE,NICKNAME,datetime.now().strftime('%Y%m%d')) )
file_handler.addFilter(HostnameFilter())
file_handler.setFormatter(FORMATTER)
return file_handler
def get_logger(logger_name):
logger = logging.getLogger(logger_name)
logger.setLevel(logging.DEBUG)
logger.addHandler(get_console_handler())
logger.addHandler(get_file_handler())
logger.propagate = False
coloredlogs.install(logger=logger)
return logger
I'm wondering whether it's possible to log to "%s/%s_%s.log" % (LOG_FILE,NICKNAME,datetime.now().strftime('%Y%m%d')) using the logging module.
Thanks.