django的日志系统

摘要

日志在程序开发中是少不了的,通过日志我们可分析到错误在什么地方,有什么异常。在生产环境下有很大的用途。
django中使用python提供的logging模块,在django中要用logging,并且需要配置一定的规则。
这里有一篇文章总结得比较好:https://www.cnblogs.com/luohengstudy/p/6890395.html

1.logging模块

logging模块为应用程序提供了灵活的手段记录事件、错误、警告和调试信息。对这些信息可以进行收集、筛选、写入文件、发送给系统日志等操作,甚至还可以通过网络发送给远程计算机。

  • 日志记录级别
    logging模块的重点在于生成和处理日志消息。每条消息由一些文本和指示其严重性的相关级别组成。级别包含符号名称和数字值
    CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTEST
    CRTICAL: 关键错误/消息
    ERROR: 错误
    WARNING: 警告信息
    INFO: 通知信息
    DEBUGZ: 调试信息
    NOTEST: 无级别

  • 记录器
    记录器负责管理日志消息的默认行为,包括日志记录级别、输出目标位置、消息格式以及其它基本细节
    filename: 将日志消息附加到指定文件名的文件夹
    filemode: 指定用于打开的文件模式
    format : 用于生成日志消息的格式化字符串
    datefmt:用于输出日期和时间的格式化字符串
    level: 设置记录器的级别
    stream: 提供打开的文件,用于把日志消息发送到文件

  • format 日志的消息格式


    image.png
  • 内置处理器
    logging模块提供了一些处理器,可以通过各种方式处理日志消息。使用addHandler()方法将这些处理器添加给Logger对象。另外还可以为每个处理器配置它自己的筛选和级别。

    handlers.DatagramHandler(host,port):发送日志消息给位于制定host和port上的UDP服务器。
    handlers.FileHandler(filename):将日志消息写入文件filename。
    handlers.HTTPHandler(host, url):使用HTTP的GET或POST方法将日志消息上传到一台HTTP 服务器。
    handlers.RotatingFileHandler(filename):将日志消息写入文件filename。如果文件的大小超出maxBytes制定的值,那么它将被备份为filename1。

2.django中使用logging

  • 配置settings.py文件
    (1): 创建日志路径
# 创建日志的路径
LOG_PATH = os.path.join(BASE_DIR, 'log')
# 如果地址不存在,则自动创建log文件夹
if not os.path.join(LOG_PATH):
    os.mkdir(LOG_PATH)

(2)日志处理
version : 版本
disable_existing_loggers: 是否禁用loggger
formatters : 配置打印的日志格式
handlers:用来定义具体处理日志的方式,可以定义多种
loggers: 用来配置用那种handlers来处理日志,比如你同时需要输出日志到文件、控制台
filters: 用来对那些从 logger 传至 hadnler 的日志记录提供额外的控制

LOGGING = {
    # version只能为1,定义了配置文件的版本,当前版本号为1.0
    "version": 1,
    # True表示禁用logger
    "disable_existing_loggers": False,
    # 格式化
    'formatters': {
        'default': {
            'format': '%(levelno)s %(funcName) %(module)s %(asctime)s %(message)s '
        },
        'simple': {
            'format': '%(levelno)s %(module)s %(created)s %(message)s'
        }
    },

    'handlers': {
        'stu_handlers': {
            'level': 'DEBUG',
            # 日志文件指定为5M, 超过5m重新命名,然后写入新的日志文件
            'class': 'logging.handlers.RotatingFileHandler',
            # 指定文件大小
            'maxBytes': 5 * 1024,
            # 指定文件地址
            'filename': '%s/log.txt' % LOG_PATH,
            'formatter': 'default'
        },
        'uauth_handlers': {
            'level': 'DEBUG',
            # 日志文件指定为5M, 超过5m重新命名,然后写入新的日志文件
            'class': 'logging.handlers.RotatingFileHandler',
            # 指定文件大小
            'maxBytes': 5 * 1024 * 1024,
            # 指定文件地址
            'filename': '%s/uauth.txt' % LOG_PATH,
            'formatter': 'simple'
        }
    },
    'loggers': {
        'stu': {
            'handlers': ['stu_handlers'],
            'level': 'INFO'
        },
        'auth': {
            'handlers': ['uauth_handlers'],
            'level': 'INFO'
        }
    },

    'filters': {

        }
}
  • 应用日志处理
import logging
logger = logging.getLogger('stu')
def index(request):
    if request.method == 'GET':
        # 记录获取所有学生信息的日志
        stuinfos = StudentInfo.objects.all()
        logger.info('url: %s method: %s 获取学生信息成功' % (request.path, request.method))
        return render(request, 'index.html', {'stuinfos': stuinfos})
  • 结果


    image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容