zoukankan      html  css  js  c++  java
  • 07.django日志配置

    https://docs.djangoproject.com/en/3.0/topics/logging/
    https://yiyibooks.cn/xx/python_352/library/logging.html#logger-objects
    https://docs.python.org/3/library/logging.html#logrecord-attributes
    https://yiyibooks.cn/xx/python_352/library/logging.handlers.html

    • logger 记录器,所有日志都要经过的入口
    • handler 处理器,接收 logger 的日志,决定 log 是打印的目的,是文件、屏幕,还是其他地方,比如邮件 ELK
    • filter 过滤器,过滤你想要的日志(不用)
    • formatter 格式化,格式化 handler 的日志格式

    一.logger 日志级别

    级别 描述
    CRITICAL 50 关键错误、消息
    ERROR 40 错误
    WARNING 30 警告
    INFO 20 通知消息
    DEBUG 10 调试
    NOTSET 0 无级别

    二.logger 配置

    • logger
        'loggers': {
            'log名称':{
                'handlers': ['处理器名称1',,'处理器名称2'],
                'level': '日志级别',
                'propagate': False,
            },
    
    
    • handlers
            'handlers名称': {
                'level': '日志级别',
                'class': 'handlers类',
                'filename': '文件全路径',
                'when': "D",
                'interval': 1,
                'formatter': 'formatter名称'
            },
    
    • formatter
            "formatter名称": {
                "format": '%(asctime)s %(name)s %(levelname)s %(pathname)s:%(lineno)d %(module)s:%(funcName)s %(message)s',
                "datefmt": "%Y-%m-%d %H:%M:%S"
            },
    
    • format 日志消息格式
    格式 描述
    %(name)s 记录器 logger 的名字
    %(levelno)s 数据形式的日志记录级别
    %(levelname)s 文本形式的日志记录级别
    %(filename)s 执行日志记录调用的源文件的文件名
    %(pathname)s 执行日志记录调用的源文件的 全路径+文件名
    %(funcName)s 执行日志记录调用的函数名称
    %(module)s 调用的模块名称,django是 app 的名称
    %(lineno)d 记录调用的行号
    %(created)s 执行日志记录的时间
    %(asctime)s 日期时间
    %(msecs)s 毫秒部分
    %(thread)s 线程ID
    %(threadName)s 线程名称
    %(process)d 进程ID
    %(message)s 记录的消息,自定义内容
    • 按时间轮转的参数

    https://docs.python.org/3/library/logging.handlers.html#timedrotatingfilehandler

    格式 描述
    'S' Seconds
    'M' Minutes
    'H' Hours
    'D' Days
    'W0' - 'W6' Weekday (0=Monday)
    'midnight' Roll over at midnight

    三.使用

    • 3.1 定义一个 logger
        'loggers': {
            'mylogger':{
                'handlers': ['console'],
                'level': 'DEBUG'
            },
    
    • 3.2 配置 handler
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',# 写到屏幕
                'formatter': 'simple'
            },
    
    • 3.3 某个 view 使用这个 logger
    import logging
    logger = logging.getLogger('mylogger')
    
    • 3.4 视图内使用自定义输出级别和内容
    logger.debug('视图的debuglog')
    
    • 3.5 增加一个文件 handler
            'file': {
                'level' :'DEBUG',
                'class': 'logging.FileHandler',
                'filename': '/tmp/debug.log',
                'formatter': 'simple',
            }
    
    • 3.6 logger 中使用多个 handler, 关闭向上传播
            'mylogger':{
                'handlers': ['console','file'],
                'level': 'DEBUG',
                'propagate': False,
            },
    
    • 3.7 输出
    DEBUG DEBUG 日志
    ERROR ERROR 日志
    DEBUG debug log
    ERROR error log
    System check identified no issues (0 silenced).
    May 22, 2020 - 08:16:34
    Django version 3.0.6, using settings 'ops.settings'
    Starting development server at http://0.0.0.0:8000/
    Quit the server with CONTROL-C.
    DEBUG 视图的debuglog
    

    /tmp/debug.log 也会有这个日志

    四.定义一个日志输出格式,并使用

            "default": {
                "format": '%(asctime)s %(pathname)s:%(lineno)d %(module)s:%(funcName)s '
                          '%(levelname)s- %(message)s',
                "datefmt": "%Y-%m-%d %H:%M:%S"
            },
    
    • 输出
    2020-05-22 08:31:46 /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:20 views:get DEBUG- 视图的debuglog
    

    五. 定义django log,不同模块分开存放到不同文件,关闭向上传播,自定义的内容在最上级日志器记录中

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'verbose': {
                'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
                'style': '{',
            },
            'simple': {
                'format': '{levelname} {message}',
                'style': '{',
            },
            "default": {
                "format": '%(asctime)s %(name)s  %(pathname)s:%(lineno)d %(module)s:%(funcName)s '
                          '%(levelname)s- %(message)s',
                "datefmt": "%Y-%m-%d %H:%M:%S"
            },
        },
        'handlers': {
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
                'formatter': 'default'
            },
            'file': {
                'level': 'DEBUG',
                'class': 'logging.handlers.TimedRotatingFileHandler',
                'filename': '/tmp/debug.log',
                'when': "D",
                'interval': 1,
                'formatter': 'default'
            },
            "request": {
                'level': 'DEBUG',
                'class': 'logging.FileHandler',
                'filename': '/tmp/request.log',
                'formatter': 'default'
            },
            "server": {
                'level': 'DEBUG',
                'class': 'logging.FileHandler',
                'filename': '/tmp/server.log',
                'formatter': 'default'
            },
            "root": {
                'level': 'DEBUG',
                'class': 'logging.FileHandler',
                'filename': '/tmp/root.log',
                'formatter': 'default'
            },
    
            "db_backends": {
                'level': 'DEBUG',
                'class': 'logging.FileHandler',
                'filename': '/tmp/db_backends.log',
                'formatter': 'default'
            },
            "autoreload": {
                'level': 'INFO',
                'class': 'logging.FileHandler',
                'filename': '/tmp/autoreload.log',
                'formatter': 'default'
            }
        },
        'loggers': {
            'mylogger':{
                'level': 'DEBUG',
                'handlers': ['console','file'],
                'propagate': True,
            },
            "django": {
                "level": "DEBUG",
                "handlers": ["console", "file"],
                'propagate': False,
            },
            "django.request": {
                "level": "DEBUG",
                "handlers": ["request"],
                'propagate': False,
            },
            "django.server": {
                "level": "DEBUG",
                "handlers": ["server"],
                'propagate': False,
            },
            "django.db.backends": {
                "level": "DEBUG",
                "handlers": ["db_backends"],
                'propagate': False,
            },
            "django.utils.autoreload": {
                "level": "INFO",
                "handlers": ["autoreload"],
                'propagate': False,
            }
        },
        'root': {
            "level": "DEBUG",
            "handlers": ["root"],
        }
    }
    
    输出
    -rw-r--r-- 1 jenvid docker    0 5月  22 15:47 request.log
    -rw-r--r-- 1 jenvid docker  81K 5月  23 12:57 debug.log.2020-05-23_04-57
    -rw-r--r-- 1 jenvid docker 1.9K 5月  23 13:21 autoreload.log
    -rw-r--r-- 1 jenvid docker 9.4K 5月  23 13:21 db_backends.log
    -rw-r--r-- 1 jenvid docker 9.1K 5月  23 13:21 server.log
    -rw-r--r-- 1 jenvid docker 1.5K 5月  23 13:21 root.log
    -rw-r--r-- 1 jenvid docker  632 5月  23 13:21 debug.log
    

    cat root.log

    2020-05-22 10:20:25 mylogger  /home/jenvid/PycharmProjects/django/ops/apps/idcs/views.py:13 views:<module> DEBUG- DEBUG 日志
    2020-05-22 10:20:25 mylogger  /home/jenvid/PycharmProjects/django/ops/apps/idcs/views.py:14 views:<module> ERROR- ERROR 日志
    2020-05-22 10:20:25 mylogger  /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:13 views:<module> DEBUG- debug log
    2020-05-22 10:20:25 mylogger  /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:14 views:<module> ERROR- error log
    2020-05-22 10:20:30 mylogger  /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:20 views:get DEBUG- 视图的debuglog
    2020-05-23 04:57:57 mylogger  /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:20 views:get DEBUG- 视图的debuglog
    2020-05-23 05:21:39 asyncio  /usr/lib/python3.7/asyncio/selector_events.py:53 selector_events:__init__ DEBUG- Using selector: EpollSelector
    2020-05-23 05:21:40 mylogger  /home/jenvid/PycharmProjects/django/ops/apps/idcs/views.py:13 views:<module> DEBUG- DEBUG 日志
    2020-05-23 05:21:40 mylogger  /home/jenvid/PycharmProjects/django/ops/apps/idcs/views.py:14 views:<module> ERROR- ERROR 日志
    2020-05-23 05:21:40 mylogger  /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:13 views:<module> DEBUG- debug log
    2020-05-23 05:21:40 mylogger  /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:14 views:<module> ERROR- error log
    2020-05-23 05:21:44 mylogger  /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:20 views:get DEBUG- 视图的debuglog
    
  • 相关阅读:
    C语言数据结构_严蔚敏+吴伟民 课本源码
    html5下F11全屏化的几点注意
    jquery中的globalEval()源码分析
    jquery中的 parseJSON() 源码分析
    javascript正则表达式分组捕获理解
    IE6-IE9中tbody的innerHTML不能赋值
    jquery中的 jquery.contains(a,b)
    jquery中的 deferred之 when (三)
    mac下apache配置,解决It is not safe to rely on the system's timezone settings.
    服务器大量TIME_WAIT和CLOSE_WAIT的原因及解决办法
  • 原文地址:https://www.cnblogs.com/jenvid/p/12942190.html
Copyright © 2011-2022 走看看