CodeInf
CodeInf

Reputation: 23

TimeRotatingFileHandler create new file after restarting the server only in logging library Django

I am using Django logging library to log the data. I am using class-"logging.handlers.TimedRotatingFileHandler" with parameter "when" : "M" and "backupCount" 5. So, it will create a new file every minute and keep 5 latest files in backup and delete the older the files. Here, the file is only created if I restart the server. Any idea, how to create file automatically every minute?

settings.py

BASE_DIR_1 = os.path.dirname(os.path.dirname(__file__))
import logging
import os
from ./logging_formatter import CustomJsonFormatter
LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
            "level": os.getenv("DJANGO_LOG_LEVEL", "INFO"),
            "formatter": "log_shell"
        },   
        "file":
        {
            "class": "logging.handlers.TimedRotatingFileHandler",
            "filename": os.path.join(BASE_DIR_1, 'log_dir/log_file.log')
            "level": os.getenv("DJANGO_LOG_LEVEL", "INFO"),
            "formatter": "log_file",
            "when": "M",
            "interval": 1,
            "backupCount": 5,
            "delay": True
        }
    },
    "loggers": {
        "django": {
            "handlers": ["file","console"],
            "level": os.getenv("DJANGO_LOG_LEVEL", "INFO"),
        },
    },
    "formatters": {
        "log_file": { "()": CustomJsonFormatter},
        "log_shell": {"()": CustomJsonFormatter}
        
    },
}

logger = logging.getLogger(__name__)
logger.info("clicked")
logger.error("There is an error in the function")

logging_formatter.py

from pythonjsonlogger import jsonlogger
import logging
from datetime import datetime

logger = logging.getLogger()

logHandler = logging.StreamHandler()
class CustomJsonFormatter(jsonlogger.JsonFormatter):
    def add_fields(self, log_record, record, message_dict):
        super(CustomJsonFormatter, self).add_fields(log_record, record, message_dict)
        if not log_record.get('timestamp'):
            # this doesn't use record.created, so it is slightly off
            now = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ')
            log_record['timestamp'] = now
        if log_record.get('Level'):
            log_record['Level'] = log_record['level'].upper()
        else:
            log_record['Level'] = record.levelname

Upvotes: 0

Views: 20

Answers (0)

Related Questions