首页 > 其他分享 >【6.0】封装logger

【6.0】封装logger

时间:2023-08-19 17:12:41浏览次数:33  
标签:输出 封装 记录 项目 6.0 logger 级别 日志

【一】引入

  • 在项目运行过程中,日志起着非常重要的作用。
  • 它可以记录程序的运行状态、错误信息、警告以及程序员的输出,从而帮助我们更好地观察和分析项目的运行情况。
  • 因此,在每个项目中,都需要配置相应的日志记录功能。

【二】日志的作用

  • 记录程序运行过程中的错误和异常
    • 日志可以帮助我们追踪和定位程序中的错误和异常,并及时采取相应的措施来解决问题。
  • 记录警告信息
    • 在程序运行过程中,可能会遇到一些警告情况
      • 例如某个函数被废弃或某个操作可能引发潜在问题等。
    • 通过记录警告信息,我们可以在出现问题之前进行预警和处理。
  • 记录程序员的输出
    • 在开发和调试阶段,程序员通常会使用print语句输出一些调试信息
      • 如变量的值、程序流程等。
    • 通过日志记录这些输出信息,可以方便地观察程序的执行情况。
  • 观察项目运行情况
    • 日志还可以帮助我们了解项目的运行状态
      • 例如请求的处理时间、资源消耗等
    • 有助于优化项目的性能和稳定性。

【三】django中加入记录日志的功能

【1】配置日志字典

  • 首先,在项目的settings.py文件中,我们可以配置一个日志字典来定义日志记录的行为。

  • luffyCity\luffyCity\settings\dev.py

###############日志配置文件#################

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
        },
    },
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'handlers': {
        'console': {
            # 实际开发建议使用WARNING
            'level': 'WARNING',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'file': {
            # 实际开发建议使用ERROR
            'level': 'ERROR',
            'class': 'logging.handlers.RotatingFileHandler',
            # 日志位置,日志文件名,日志保存目录必须手动创建,注:这里的文件路径要注意BASE_DIR代表的是小luffyapi
            'filename': os.path.join(os.path.dirname(BASE_DIR), "logs", "luffy.log"),
            # 日志文件的最大值,这里我们设置300M
            'maxBytes': 300 * 1024 * 1024,
            # 日志文件的数量,设置最大日志数量为10
            'backupCount': 10,
            # 日志格式:详细格式
            'formatter': 'verbose',
            # 文件内容编码
            'encoding': 'utf-8'
        },
    },
    # 日志对象
    'loggers': {
        'django': {
            'handlers': ['console', 'file'],
            'propagate': True,  # 是否让日志信息继续冒泡给其他的日志处理系统
        },
    }
}

【2】获取logger对象

  • 在项目的某个地方,我们需要获取logger对象,以便记录日志。

  • 可以在utils/common_logger.py文件中编写以下代码来获取logger对象。

  • utils/common_logger.py

# 日志对象获取,以后想用日志的地方,直接导入,使用 logger.info  error....
import logging

logger = logging.getLogger('django')

【3】使用方法

  • 在代码中的需要记录日志的地方,直接使用已获取的logger对象进行日志记录操作
# DEBUG < INFO < WARNING < ERROR < CRITICAL
# 在需要记录日志的位置使用logger对象进行日志记录
logger.debug('debug级别')
logger.info('info级别')
logger.warning('warning级别')
logger.error('error级别')
logger.critical('CRITICAL级别')
  • 通过以上步骤,我们可以在Django项目中配置和使用日志记录功能。

    • 在开发阶段,建议使用高级别(如INFO或WARNING)来输出日志信息
    • 在项目上线后,可以将日志输出级别调整为较低级别,以减少不必要的日志输出。
  • 这样,在项目运行过程中,我们不再使用print语句输出调试信息,而是通过logger对象记录日志信息。

  • 这样做的好处是,在项目上线后可以方便地关闭或调整日志的输出级别,避免敏感信息泄露,同时也提供了更加灵活和可定制的日志记录功能。

标签:输出,封装,记录,项目,6.0,logger,级别,日志
From: https://www.cnblogs.com/dream-ze/p/17642698.html

相关文章

  • react项目搭建-路由封装
    routerv6路由统一管理与添加,对是否登录进行判断。1.使用脚手架创建项目新建一个文件夹,在文件夹内部打开命令行工具。执行命令:npxcreate-react-app项目名字将项目放在开发工具中,打开项目终端运行项目(npmstart/yarnstart)注:npx命令会帮助我们临时安装create-react-ap......
  • 面向对象开发的封装
    封装被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。抽象和封装是面向对象程序设计的相关特性。抽象允许相关信息可视化,封装则使程序员实现所需级别的抽象。封装使用 访问修饰符 来实现。一个 访问......
  • 面向对象——封装
    什么是封装    面向对象编程是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。封装被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码......
  • Flowable 6.6.0版本中的数据库表解读 - ACT_ID篇
    本文将介绍Flowable6.6.0版本中以ACT_ID_开头的表,ID表示identity(组织机构),包含用户、权限、用户组。ACT_ID_GROUP这个表存储了组信息。字段名字段含义ID_主键IDREV_修订版本号NAME_组名称TYPE_组类型ACT_ID_INFO这个表存储了一些标识信息。......
  • 笔记整理--C语言--失落的C语言结构体封装艺术 - 博客 - 伯乐在线——转载
    失落的C语言结构体封装艺术-博客-伯乐在线转载1.谁该阅读这篇文章本文是关于削减C语言程序内存占用空间的一项技术——为了减小内存大小而手工重新封装C结构体声明。你需要基本的C语言的基本知识来读懂本文。如果你要为内存有限制的嵌入式系统、或者操作系统内核写代码,那......
  • Win11+ VS2022编译 FFmpeg6.0 静态库
    目录编译前言为什么项目编译?前期准备环境配置ffmpeg外部库额外的编译选项-for渲染opengl(需要glext)ffnvcodec(需要nv-codec-headers)AMFsdk头文件编译工具链开始编译step1.选择编译类型Debug/ReleaseDll/libstep2.打包SDK验证结尾参考链接编译前言编译作为自己持有......
  • 16-面向对象编程-封装
    面向对象编程有三大特征:封装、继承和多态 访问修饰符可以控制属性的访问范围public:表示公共访问级别,可以被任何类访问。protected:表示受保护访问级别,可以被类本身、子类和同一包中的类访问。default(缺省):表示默认访问级别,即如果没有使用访问修饰符,默认是此级别,可以被同一包......
  • 类和对象(封装)
    c++面向对象的三大特性:封装、继承、多态。封装将属性和行为作为一个整体,表现生活中的事物。将属性和行为加以权限控制。 意义1:在设计类的时候,属性和行为写在一起,表现事物。实例化:通过一个类创建一个对象的过程。语法:class类名{  访问权限: 属性 /行为  };类中的属性和......
  • 计算机 封装的思想
    封装思想!——封装思想使细节隐藏而让对象以整体功能、性质的面目出现。人们往往可以把封装后事物看成一个整体的对象加以利用或认知,而无需太多关注内部结构和运行机理。——封装思想大大简化了人类对世界的认知。也是人类文明发展到如此高度的重要原因。 封装思想无处不在—......
  • 封装socket网络通信模块
    封装socket网络通信模块-network由于TCP、UDP客户端、服务端的操作流程固定,所以为了后期使用方便,把socket网络通信封装成网络模块并生成libnw.so共享库头文件network.h#ifndefNETWORK_H#defineNETWORK_H#include<netinet/in.h>#include<stdbool.h>#include<stdint.h>......