Bootstrap

django中如何配置日志存储记录

  1. 在settings中添加
    # 日志文件简单配置
    '''
    LOGGING = {
        "version": 1,
        "disable_existing_loggers": False,
        "handlers": {
            "file": {
                "level": "DEBUG",
                "class": "logging.FileHandler",
                "filename": os.path.join(os.path.dirname(BASE_DIR),"logs/debug.log"),
            },
        },
        "loggers": {
            "django": {
                "handlers": ["file"],
                "level": "DEBUG",
                "propagate": True,
            },
        },
    }
    '''
    # Logging
    # 日志文件规范配置
    LOG_DIR = os.path.join(BASE_DIR, 'logs')
    os.makedirs(LOG_DIR, exist_ok=True)
    
    # 日志配置
    LOGGING = {
        'version': 1,  #使用的python内置的logging模块,那么python可能会对它进行升级,所以需要写一个版本号,目前就是1版本
        'disable_existing_loggers': False, #是否去掉目前项目中其他地方中以及使用的日志功能,但是将来我们可能会引入第三方的模块,里面可能内置了日志功能,所以尽量不要关闭。
        'formatters': { #日志记录格式
            'standard': { # asctime记录时间,filename 表示日志发生的文件名称,funcName模块方法名,lineno行号,levelname等级,message错误信息
                'format': '[%(asctime)s]->%(filename)s->%(funcName)s->line:%(lineno)d [%(levelname)s]%(message)s'
            },
            'simple': {
                'format': '%[%(asctime)s]->(levelname)s->%(module)s->%(lineno)d->%(message)s'
            },
        },
        'filters': { #过滤器:可以对日志进行输出时的过滤用的
            'require_debug_true': { #在debug=True下产生的一些日志信息,要不要记录日志,需要的话就在handlers中加上这个过滤器,不需要就不加
                '()': 'django.utils.log.RequireDebugTrue',
            },
            'require_debug_false': { #和上面相反
                '()': 'django.utils.log.RequireDebugFalse',
            },
        },
        'handlers': { #日志处理方式,日志实例,向哪里输出
            'console': { #在控制台输出时的实例
                'level': 'INFO', #日志等级;debug是最低等级,那么只要比它高等级的信息都会被记录
                'filters': ['require_debug_true'], #在debug=True下才会打印在控制台
                'class': 'logging.StreamHandler', #使用的python的logging模块中的StreamHandler来进行输出
                'formatter': 'simple'
            },
            'file': {
                'level': 'INFO',
                'class': 'logging.handlers.RotatingFileHandler',
                # 日志位置,日志文件名,日志保存目录必须手动创建
                'filename': os.path.join(LOG_DIR, "my_django.log"), #注意,你的文件应该有读写权限。
                # 日志文件的最大值,这里我们设置300M
                'maxBytes': 300 * 1024 * 1024,  # B
                # 日志文件的数量,设置最大日志数量为10
                'backupCount': 10,
                # 日志格式:详细格式
                'formatter': 'standard',
                'encoding': 'utf-8',  # 设置默认编码,否则打印出来汉字乱码
            },
        },
        # 日志对象
        'loggers': {
            'django': {  #和django结合起来使用,将django中之前的日志输出内容的时候,按照我们的日志配置进行输出,
                'handlers': ['console', 'file'], #将来项目上线,把console去掉
                'propagate': True, #冒泡:是否将日志信息记录冒泡给其他的日志处理系统,工作中都是True,不然django这个日志系统捕获到日志信息之后,其他模块中可能也有日志记录功能的模块,就获取不到这个日志信息了
            },
        }
    }

  2. 创建py文件使用
    import logging
    logger = logging.getLogger('django')
    
    # Create your views here.
    
    class IndexView(generic.ListView):
        template_name = "polls/index.html"
        context_object_name = "latest_question_list"
        logger.info('test log')
        def get_queryset(self):
            #Return the last five published questions.
            return Question.objects.filter(pub_date__lte=timezone.now()).order_by("-pub_date")[:5]
  3. 启动django测试
    打开浏览器,进入网址,http://127.0.0.1:8000/polls/
    
    查看生成的日志文件:vim  ./mysite/logs/my_django.log

    参考文章:https://www.cnblogs.com/xh2023/p/17350128.html

;