logging日志模块

Django框架 - 13 日志Logging模块的使用 日志使用 前言 在django中对日志记录提供了很好的支持,日志文件在开发环境中以及在线上环境或者在测试环境中都可以很好的反应程序的执行情况,以及出现bug的时候,准确的定位bug的位置,请求方法,错误原因等。所以说日志对于程序猿来说是一个开发者必备的必须了解且精通的东西。以下是对日志的配置以及使用,以及调试等 1. 日志logging模块 logging模块可以收集记录错误,警... 阅读详情

一、logging模块

django使用python的内置模块logging来管理自己的日志

logging模块的四大组件
  • Loggers
  • Handlers
  • Filters
  • Formatters
  • Loggers
Loggers(日志记录器)
  • 系统中的每一条日志都是由该组件进行记录的,每一个记录器都应该有其自己的名称并标记其最低记录的等级
    • DEBUG:所有等级中最低,其信息一般用来作为调试的辅助信息
    • INFO:程序的一般信息
    • WARNING:警告,通常用来对某些可能出现的错误且不会影响程序正常运行的信息进行警告。
    • ERROR:错误,表示出现了某种错误。
    • CRITICAL:奔溃,出现了严重级别的错误。
  • 日志文件中的每一条信息都是一条信息记录,都应该有其对应的级别,然后记录一些打印该条日志时的一些元数据,来告诉查阅者出现这条日志时程序的大致情况,例如调用堆栈或者状态码等等。
  • 当一条日志给到logger时,logger会对该条信息的级别与自身的级别进行比较,如果该日志级别不低于本身级别,logger就会进行下一步操作。相反,如果日志的信息级别比logger的低,那么其会忽略这条日志,不进行任何操作。
  • 当logger经过级别的比较之后决定要对某条日志进行处理时,就将该条日志交给了Handlers
Handlers(日志处理器)
  • 他来处理具体每条信息,例如是将日志打印到屏幕还是记录到文件或者发送至某个网络连接。
  • 和记录器(logger)一样,Handlers也有自己的记录级别,如果日志级别低于handler的级别,handler同样会忽略掉该条日志。
  • 另外,一个logger可以拥有多个handler,而且不同的handler可以拥有不同的记录级别。这样,我们就可以根据不同的日志级别对同一个logger做不同的事情,例如我们可以将级别为WARNING和ERROR的日志打印到屏幕,而级别为CRITICAL级别的日志直接发送到管理者邮箱。
Filters(日志过滤器)
  • 提供了传递给handler之前的附加功能。
  • 在通常情况下,一条日志信息只要达到logger的级别之后就会传递给handler处理,但是我们可以通过使用filter来对日志进行额外的过滤。例如我们可以使用某个filter来控制只允许某个特定的源的ERROR级别的日志。
  • Filter还运行在处理之前修改日志,例如降低或者提高日志的级别。
  • Filter可以在logger和handler中同时使用,而且多个filter会同时工作。
Formatters(日志记录格式化)
  • 定义了怎么显示内容,因为最终的日志都会是以文本的形式展现,formatter就是描述怎么来做这件事。
  • formatter通常都是使用python格式化字符串的方法来对日志进行格式化,具体的属性列表可参考

二、django官方中文文档

三、django日志配置,简单例子分析

这几个例子,官方文档上都有,这里只做简要分析

  • 第一种,输出到文件
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/path/to/django/debug.log',  # 输出日志到指定位置的文件中
        },
    },
    'loggers': {
        'django': {  # django框架的输出日志配置
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}
  • 第二种,输出到控制台(屏幕)
import os
 
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'), # 此为True时,可看到所有日志。包含ORM生成的sql语句
        },
    },
}
  • 第三种,复杂点的配置
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        # verbose输出稍复杂信息,等级、日志、附加时间、进程号等等
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
        # simple只输出日志级别和日志信息
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'filters': {
        # 使用别名special,如果这个过滤器需要附加参数,它可以提供一个配置字典
        # 在本例中,在实例化SqecialFilter时参数foo会被赋值为bar
        'special': {
            '()': 'project.logging.SpecialFilter',
            'foo': 'bar',
        },
        # 只有在环境变量DEBUG等于True时才输出日志
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'handlers': {
        # 直接输出级别为DEBUG(或更高)的信息到控制台,本handler使用名称为simple的format
        'console': {
            'level': 'INFO',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        # 使用AdminEmailHandler发送级别为ERROR(或更高)的信息到网站管理员邮箱,这个handler使用名称为special的过滤器
        'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler',
            'filters': ['special']
        }
    },
    'loggers': {
        # 打印所有信息到名称为console的handler
        'django': {
            'handlers': ['console'],
            'propagate': True,
        },
        # 传递ERROR级别的信息到名为mail_admins的handler
        # 另外的,该条记录器标示了如果使用本记录器处理日志,那么将不使用django处理
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': False,  ###
        },
        # 传递所有INFO级别(或更高)信息到名称为special的过滤器和两个handler
        # 这样就实现了如果是INFO级别的信息则打印到控制台,如果是ERROR或者CRITICAL级别的则通过email发送给管理员
        'myproject.custom': {
            'handlers': ['console', 'mail_admins'],
            'level': 'INFO',
            'filters': ['special']
        }
    }
}
Python常用模块 之 logging:日志模块 阅读详情

相关推荐

【Audio driver】深入解析mixer_paths.xml中的音频通路配置

本文深入解析了Android音频驱动开发中的核心配置文件mixer_paths.xml。文章以高通平台为例,详细阐述了音频通路(FE、BE、DSP、Device)的概念与连接逻辑,并通过实战案例拆解了扬声器与麦克风通路的配置方法、关键控件作用及调试技巧,是理解与定制Android音频系统的实用指南。

ik6789012的博客 358

Django logging日志模块详解(日志记录模板配置)

一.Django日志 Django使用python内建的logging模块打印日志,Python的logging配置由四个部分组成: 1>.记录器(Logger) 2>.处理程序(Handler) 3>.过滤器(Filter) 4>.格式化(Formatter) 二、Logger 记录器 Logger 是日志系统的入口。每个 logger 都是命名了的 bucket, 消息写入 bucket 以便进一步处理。 Logger 可以配置日志级别。日志级别描述了由该 .

zhouzhiwengang的专栏 1万+

Arduino安装图文教程:小白也能轻松上手

手把手带你完成Arduino安装全过程,无论你是编程新手还是硬件小白,都能快速搭建开发环境。结合arduino安装教程与实操步骤,避开常见错误,让创作即刻启程。

weixin_35509395的博客 1107

Django 之Logging

logging模块是 Python 内置的日志管理模块,不需要额外安装。默认只输出warning。

hj1993的博客 1046

金仓数据库KCM认证考试介绍【2025年4月更新】

金仓数据库认证资深专家KCM认证考试介绍

qq709869231的博客 3233

如何制作微信小程序的在线购物商城应用

首先,你需要规划好商城的整体框架,确定好你的目标用户群体,思考他们的需求是什么。接下来,使用微信开发者工具创建一个新的小程序项目,输入你的AppID,选择好保存路径,点击“创建”,一个新的商城雏形就诞生了。你可以把这里当作自己的家,无论是工作之余的小憩,还是寻找灵感的驿站,我都希望你能在这里找到属于你的那份快乐和满足。数据是现代商业的灵魂,通过数据分析,你可以更准确地把握用户的行为模式,从而做出更明智的决策。

master_chenchen的博客 2428

Python-Django的“日志功能-日志模块(logging模块)-日志输出”的功能详解

Python-Django的“日志功能-日志模块(logging模块)-日志输出”的功能详解

昊虹AI笔记 3819

【全新官方接口】php检测微信域名拦截,检测微信域名被封

你的域名在微信被拦截的3种常见情况 1、域名因违规或有风险被拦截(红色拦截) 2、类似taobao.com,douyin.com这种的恶意竞争式拦截,淘宝、抖音等微信的竞争对手一般都是白色拦截(白色拦截) 3、有一个中间页的拦截,需要多次点击按钮才可以跳转到你的域名的,多是一些新型域名后缀,例如.top .xyz .link后缀,这种情况,备案后可以解决(备案拦截) 通过php get_headers()函数就可以分析到结果 这个下标为6是一个URL,在微信访问后正是这个讨厌的页面! 如果切换为

TANKING,开源开发者! 2877

67. Django日志logging设置

需求在项目开发中,如果需要调试的时候,一开始大部分会去直接使用print, 但是print的频繁时候会比较损耗服务的性能,并且无法将日志输出的文件中进行存储。所以应该尽量避免使用prin...

DevOps海洋的渔夫@专栏 2807

[案例四] 智能填写属性工具(支持装配组件还有建模实体属性的批量创建、编辑)

本次案例主要是对上次导出自动导出BOM的一个前处理,要想导出属性,首先的有属性。于是本着学习的态度进行制作,可能有些功能有点别扭(支持装配环境下组件属性的批量填写,支持建模环境下的实体(不包括装配组件实体)——为了减负我把其过滤掉了,一般没人会往装配体里添加进行建模吧,但是不免有奇葩,哈哈哈)。

weixin_47753171的博客 1981

爬虫面试:关于爬虫破解验证码的13个经典面试题

​解释:验证码是一种用于区分人类用户和自动化程序(如爬虫)的技术,通常通过显示图形、文字或音频等方式,要求用户完成特定任务(如识别扭曲的字母、点击特定区域等)。​作用:防止恶意爬虫滥用网站资源、进行批量注册、登录破解等行为,保护网站的安全性和数据的完整性。

数据知道的博客 1万+

【Django】如何在Django中配置logging

本文介绍了如何在Django中配置logging,包括将日志输出到控制台和文件中,按天分割日志文件,保存7天的日志文件,将日志文件存放在名为’log’的文件夹中等。通过配置logging,我们可以方便地记录应用程序的运行状态,以便在出现问题时进行排查。

weixin_49317370的博客 731

微信小程序 - request:fail errcode:10011 cronet_error_code:0 error_msg:network change, cancel all task请求报错

微信小程序请求接口,报request:fail errcode:10011是什么原因,uniapp微信小程序request:fail errcode:10011 cronet_error_code:0 error_msg:network change, cancel all task,微信小程序wx.request常规访问接口,有个别用户的接口请求频繁报错,UniApp 微信小程序uni.request请求接口报错:request:fail errcode:10011 的原因分析与解决方案,苹果ios,安卓

🏆 前端领域优质创作者 4567

python 日志 logging模块(详细解析)

1 基本使用 转自:https://www.cnblogs.com/wf-linux/archive/2018/08/01/9400354.html 配置logging基本的设置,然后在控制台输出日志, import logging logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(...

pansaky的博客 15万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

如何使用 Python 的 logging 模块记录日志

在编写 Python 程序时,日志记录是一个非常重要的部分。日志不仅帮助你在开发过程中调试代码,还可以在程序正式运行时提供诊断信息,帮助定位问题。如果你正在构建一个复杂的系统或者开发大型应用程序,日志更是不可或缺的工具。Python 提供了强大且灵活的日志模块logging,通过它,你可以记录各种类型的日志信息,从调试信息到错误报告。在本文中,我们将介绍 Python 的logging模块,帮助你了解如何使用这个模块来记录和管理日志。我们将从基础开始,逐步扩展到更高级的使用方式,适合新手阅读。

chusheng1840的博客 2280

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【python】python进阶——logging日志模块

本文主要介绍了logging 模块的核心概念、高级用法和最佳实践,助你构建专业级的应用日志系统。

weixin_51924657的博客 2498

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python 日志 logging 模块详解

文章目录1 日志相关概念1.1 日志的作用1.2 日志的等级1.3 logging 模块两种使用方式2 使用 logging 提供的模块级别的函数2.1 logging 模块定义常用函数2.2 使用方式1:简单配置2.3 使用方式2:使用 logging.basicConfig() 函数3 使用 Logging 日志系统的四大组件3.1 Logger 类3.2 Handler 类3.3 Formater 类3.4 Filter类(了解即可)3.5 日志流处理简要流程 1 日志相关概念 1.1 日志的作用

桑凯旋的博客 1920

python logging 日志模块

第三种方式:dictConfig()

木下瞳的博客 1176

Python的logging模块记录日志

Python日志模块logging的使用指南 本文详细介绍了Python内置的logging模块,包括日志级别、组件和使用方法。

面团酥的博客 961

python logging模块默认日志级别_Python 日志模块logging

logging模块:logging是一个日志记录模块,可以记录我们日常的操作。logging日志文件写入默认是gbk编码格式的,所以在查看时需要使用gbk的解码方式打开。logging日志等级:CRITICAL(50) > ERROR(40) > WARNING(30) > INFO(20) > DEBUG(10)logging有函数式的和面向对象的两种方式。由于函数式的功...

weixin_42500963的博客 1279

python——日志模块(logging)

python——日志模块(logging

黑砂的博客 3067

日志模块logging

第一种方式是使用logging提供的模块级别的函数第二种方式是使用Logging日志系统的四大组件logging.debug(msg, *args, **kwargs) | 创建一条严重级别为DEBUG的日志记录logging.info(msg, *args, **kwargs) | 创建一条严重级别为INFO的日志记录logging.warning(msg, *args, **kwargs) | 创建一条严重级别为WARNING的日志记录。

任我行的博客 631

python中logging日志模块详解

用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么了,但是当我需要看大量的地方或者在一个文件中查看的时候,这时候print就不大方便了,所以Python引入了logging模块来记录我想要的信息。 print也可以输入日志,logging相对print来说更好控制输出在哪个地方,怎么输出及控制消息级别来过滤掉那些不需要的信息。 1、日志级别 import logging # 引入logging模块 # 将信息打印到控制台上 logging.de

weixin_42891455的博客 657
上一篇: Django中间件Middleware
下一篇: uWSGI、WSGI分析
AggressionStorm
博客等级 码龄9年 6粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值