首页 > 其他分享 >18-项目实战-日志输出及打印--logging

18-项目实战-日志输出及打印--logging

时间:2023-02-01 11:57:41浏览次数:51  
标签:logging level -- 18 handlers collect 日志 logger

转载: https://www.cnblogs.com/wangyingblock/p/10407987.html

Django 日志输出及打印--logging

Django使用python自带的logging作为日志打印工具。

logging是线程安全的,主要分为4部分:

Logger 
用户使用的直接接口,将日志传递给Handler
Handler 
控制日志输出到哪里,console,file… 
一个logger可以有多个Handler
Filter 
控制哪些日志可以从logger流向Handler
Formatter 
控制日志的格式

在使用 django 开发过程中,默认的日志输出是不能满足我们去排查问题的,往往需要自定义的日志输出,帮助我们去排查程序BUG,定位问题原因。Django通过在settings文件中使用LOGGING来定制日志输出(包括定义logger, handler, formatter等),例如,settings文件中定义如下:

BASE_LOG_DIR = os.path.join(BASE_DIR, "log")
LOGGING = {
    'version': 1,  # 保留字
    'disable_existing_loggers': False,  # 禁用已经存在的logger实例
    # 日志文件的格式
    'formatters': {
        # 详细的日志格式
        'standard': {
            'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
                      '[%(levelname)s][%(message)s]'
        },
        # 简单的日志格式
        'simple': {
            'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
        },
        # 定义一个特殊的日志格式
        'collect': {
            'format': '%(message)s'
        }
    },
    # 过滤器
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    # 处理器
    'handlers': {
        # 在终端打印
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],  # 只有在Django debug为True时才在屏幕打印日志
            'class': 'logging.StreamHandler',  #
            'formatter': 'simple'
        },
        # 默认的
        'default': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
            'filename': os.path.join(BASE_LOG_DIR, "xxx_info.log"),  # 日志文件
            'maxBytes': 1024 * 1024 * 50,  # 日志大小 50M
            'backupCount': 3,  # 最多备份几个
            'formatter': 'standard',
            'encoding': 'utf-8',
        },
        # 专门用来记错误日志
        'error': {
            'level': 'ERROR',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
            'filename': os.path.join(BASE_LOG_DIR, "xxx_err.log"),  # 日志文件
            'maxBytes': 1024 * 1024 * 50,  # 日志大小 50M
            'backupCount': 5,
            'formatter': 'standard',
            'encoding': 'utf-8',
        },
        # 专门定义一个收集特定信息的日志
        'collect': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
            'filename': os.path.join(BASE_LOG_DIR, "xxx_collect.log"),
            'maxBytes': 1024 * 1024 * 50,  # 日志大小 50M
            'backupCount': 5,
            'formatter': 'collect',
            'encoding': "utf-8"
        }
    },
    'loggers': {
       # 默认的logger应用如下配置
        '': {
            'handlers': ['default', 'console', 'error'],  # 上线之后可以把'console'移除
            'level': 'DEBUG',
            'propagate': True,  # 向不向更高级别的logger传递
        },
        # 名为 'collect'的logger还单独处理
        'collect': {
            'handlers': ['console', 'collect'],
            'level': 'INFO',
        }
    },
}

使用方法:

import logging
# 生成一个以当前文件名为名字的logger实例
logger = logging.getLogger(__name__)
def index(request):
    logger.debug("一个萌萌的请求过来了。。。。")
    logger.info("一个更萌的请求过来了。。。。")
    logger.debug("这是app01里面的index视图函数")
    
 
    return HttpResponse("OK")

标签:logging,level,--,18,handlers,collect,日志,logger
From: https://www.cnblogs.com/kh-1314/p/17081879.html

相关文章

  • 17-项目实战-上传excel并保存到数据库
    1.创建数据表classHome(models.Model):"""首页"""title=models.CharField(verbose_name="标题",max_length=32)def__str__(self):return......
  • 16-项目实战-上传文件-实战
    1.创建数据表classUserInfo(models.Model):"""用户信息"""name=models.CharField(verbose_name="姓名",max_length=32)age=models.IntegerField(ve......
  • 15-项目实战-上传文件-配置media
    #在django的开发过程中有两个特殊的文件夹:static:存放静态文件的路径,包括:CSS,JS,项目图片.media:用户上传的数据.1.配置media#启用media:在根目录......
  • 路径和超链接
    相对路径:以引用文件所在位置为参考基础,而建立出的目录路径,图片相对于HTML页面的位置绝对路径:指目录下的绝对位置,直接到达目标位置,通常从盘符开始的路径.超链接标签......
  • 14-项目实战-图形页面
    #第三方js插件1.highchart国外:https://www.hcharts.cn/demo/highcharts/column-basic2.echats国内(推荐):https://echarts.apache.org/handbook/zh/g......
  • 13-项目实战-订单管理
    #1.依赖bootstrap.py-ModelForm#2.依赖pagemtion.py-分页1.创建订单管理表classBill(models.Model):"""订单管理"""oid=models.CharField(verbos......
  • 12- 登陆页面
    1.创建url(项目/url.py)fromapp01.viewsimportloginurlpatterns=[#登陆页面path("login/",account.login),path("logout/",account.logout),......
  • Git入门图文教程(1.5W字40图)
    01、认识一下Git!—简介Git是当前最先进、最主流的分布式版本控制系统,免费、开源!核心能力就是版本控制。再具体一点,就是面向代码文件的版本控制,代码的任何修改历史都会被......
  • Python经典题:找出1-9中有那些组合相加等于一个特定值,例如说20,一个列表中元素进行组合,
     找出1-9中有那些组合相加等于一个特定值,例如说20num=[1,2,3,4,5,6,7,8,9]defcount(num,n):#num=list(sorted(filter(lambdax:x<=n,num)))#pri......
  • HttpClient发送https请求忽略SSL证书
    没有忽略时报错javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIXpathbuildingfailed:sun.security.provider.certpath.SunCe......