Django配置日志模块 - Go语言中文社区

Django配置日志模块


在Django中,日志输出的信息有Request信息、Settings配置、Traceback信息。
日志产生的步骤:
在这里插入图片描述
日志模块配置
1.格式器formatter
2.过滤器filter
3.处理器handler
4.日志实例logger

1.格式器formatter
功能:主要用于配置日志格式,沿用python语言里面的格式属性

属性 描述
asctime 时间(2020-01-01 11:00:00,000)
threadName 线程名字(Thread-1)
thread 线程id(整型)
pathname 打印日志的文件路径
funcName 打印日志的函数名字
lineno 打印日志的代码行数
levelname 打印日志级别(DEBUG、INFO)
message 日志具体信息

例子:

'%(asctime)s [%(threadName)s: %(thread)d] %(pathname)s: %(funcName)s: %(lineno)d %(levelname)s - %(message)s'
2019-02-10 16:02:12,201 [MainThread: 6376]D:/django_project/backend_ch1_sec1/ops/logdemo.py: logdemo: 13 INFO - hello logging

2.过滤器filter
功能:对日志进行匹配和过滤,可自定义过滤器
3.处理器handler
功能:对日志进行处理,比如:写进文件,终端打印;常用的处理器有文件处理器、终端处理器。
4.日志实例logger
功能:在Python代码里面打印日志的入口点,在打印的时候可设置日志的级别(DEBUG、INFO、WARNING、ERROR、CRITICAL)

综合实例:
1.分别定义了:standard日志格式器、test过滤器、console_handler和file_handler处理器、django日志实例

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
LOG_DIR = os.path.join(BASE_DIR, 'log')
if not os.path.exists(LOG_DIR):
    os.makedirs(LOG_DIR)

LOGGING = {
    'version': 1,
    # 日志格式器配置
    'formatters': {
        'standard': {
            'format': '%(asctime)s [%(threadName)s: %(thread)d]'
                      '%(pathname)s: %(funcName)s: %(lineno)d %(levelname)s - %(message)s'
        }
    },
    # 过滤器test配置
    'filters': {
        'test': {  # 过滤器名
            '()': 'ops.TestFilter'  # 过滤器位置
        }
    },
    # 处理器配置
    'handlers': {
        # 终端处理器配置
        'console_handler': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'standard' # 使用上面定义的standard格式器
        },
        # 文件处理器配置
        'file_handler': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(LOG_DIR, 'backend_ch1_sec1.log'),
            'maxBytes': 1024*1024*1024,  # 达到1G自动分割
            'backupCount': 5,  # 保存备份文件的数量
            'formatter': 'standard', # 使用上面定义的standard格式器
            'encoding': 'utf-8'  # 指定文件编码
        }
    },
    # 配置日志实例
    'loggers': {
        'django': {  # 日志实例名
            'handlers': ['console_handler', 'file_handler'],
            'filters': ['test'],
            'level': 'DEBUG'
        }
    }
}

2.自定义过滤器
ops/init.py

import logging
class TestFilter(logging.Filter):
    def filter(self, record):
        if '***' in record.msg:
            return False
        else:
            return True
        pass

3.日志实例的使用

import os
import django
import logging

# 建立Django环境
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend_ch1_sec1.settings')
django.setup()

def logdemo():
    # django是在settings中logger的名称
    logger = logging.getLogger('django')
    logger.info('hello logging')  # 终端+文本打印
    logger.debug('hello debug')   # 文本打印
    logger.info('hello filter ***')  # 均不打印

if __name__ == '__main__':
    logdemo()
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_38900565/article/details/104558464
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 03:22:17
  • 阅读 ( 1128 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢