• Django 日志配置按日期滚动


    记录下Django关于日期的配置,以及如何根据日期滚动切割日志的问题。

    配置的源码在githun上 https://github.com/blackmatrix7/django-examples/tree/master/django_logs


    准备

    环境

    python 3.5.2

    djang 2.0.5

    创建项目

    使用命令快速新建django项目,示例的项目名为proj。

    开始

    修改配置文件

    日志部分配置,参考Django官方手册

    https://docs.djangoproject.com/en/2.0/topics/logging/#examples

    LOGGING属性实际上是一个dictConfig

    关于dictConfig的配置,参考Python官方手册

    https://docs.python.org/3/library/logging.config.html#logging-config-dictschema

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'verbose': {
                'format': '[%(asctime)s] [%(levelname)s] %(message)s'
            },
        },
        'handlers': {
            # 输出日志的控制台
            'console': {
                'level': 'INFO',
                'class': 'logging.StreamHandler',
                'formatter': 'verbose'
            },
            # 输出日志到文件,按日期滚动
            'file': {
                'level': 'DEBUG',
                'class': 'logging.handlers.TimedRotatingFileHandler',
                # TimedRotatingFileHandler的参数
                # 参照https://docs.python.org/3/library/logging.handlers.html#timedrotatingfilehandler
                # 目前设定每天一个日志文件
                'filename': 'logs/manage.log',
                'when': 'midnight',
                'interval': 1,
                'backupCount': 100,
                'formatter': 'verbose'
            },
            # 发送邮件,目前腾讯云、阿里云的服务器对外发送邮件都有限制,暂时不使用
            'email': {
                'level': 'ERROR',
                'class': 'django.utils.log.AdminEmailHandler',
                'include_html': True,
            }
        },
        'loggers': {
            # 不同的logger
            'django': {
                'handlers': ['console', 'file'],
                'level': 'INFO',
                'propagate': True,
            },
        },
    }

    创建logs目录

    cd django_logs/
    mkdir logs

    新增django_logs/logger.py

    import logging
    logger = logging.getLogger('django')

    验证

    创建app

    python manage.py startapp app

    编写视图函数

    编写一个视图函数,使用logger用于往日志文件写入日志

    django_logs/app/views.py

    from logger import logger
    from django.shortcuts import HttpResponse
    
    def test_logger(request):
        logger.info('test log')
        return HttpResponse('test log')

    配置Url

    django_logs/proj/urls.py

    from app import views
    from django.contrib import admin
    from django.urls import path
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('test_log/', views.test_logger),
    ]

    调用

    访问 http://127.0.0.1:8000/test_log/ ,在logs/manage.log中成功写入

    [2018-05-18 08:35:44,317] [INFO] test log
    [2018-05-18 08:35:44,318] [INFO] "GET /test_log/ HTTP/1.1" 200 8

    最后,修改系统日期,可以看到日志文件会按天进行分割。

    -----------------------------------------

    日志写入仅仅对于创建的logger对象有效,如果需要使用logging直接写入,则需要再做一些修改:让logging模块使用django的dictConfig。

    import logging.config
    from django.conf import settings
    
    logger = logging.getLogger('django')
    logging.config.dictConfig(settings.LOGGING)

    -----------------------------------------

    另外,Django在多进程下运行时,此方法不可行,因为logging模块不是进程安全的。

  • 相关阅读:
    再谈PHP、Python与Ruby
    php消息队列
    创业如同追女生:成功的创业者都是追女生好手
    Windows 下 Python easy_install 的安装
    常用Python第三方库 简介
    Highcharts使用手册
    sqoop java api
    redis 读写分离
    linux 安装redis
    hive 安装和部署
  • 原文地址:https://www.cnblogs.com/blackmatrix/p/9066536.html
Copyright © 2020-2023  润新知