模块(1)

1.规范目录结构
  使用规范目录的好处
    1.使项目结构更加清晰
    2.提高可读性
  规范目录结构不是固定,可以根据实际需求进行添加修改
  常用目录如下:
  bin 存放执行文件
  conf 存放配置文件
  core 存放核心业务逻辑
  db 存放数据处理相关
  lib 存放公共代码,和第三方模块
  log 存储日志文件
  readme 是一个文本文件,存放程序介绍
  获取当前执行文件的完整路径
  __file__
  如果你的窒息你个文件不在最外层,那么需要手动将要访问的模块路径加入到sys.path,以下写法使固定的
import os
BASE_DIR=os.path.dirname(os.path.dirname(__file__)
import sys
sys.path.append(BASE_DIR)
2.常用模块
  logging,time,random,os
  logging 日志模块
  什么使日志
    就像生活中的日记用于记录什么时间发生了什么事
  为什么要记日志
    就是为了在以后程序出现问题的问题,能通过日志来找到问题的原因
  怎么记日志
    可以自己实现
  当然有功能更强大的logging模块
  import logging()
  最基本的用法
    logging.debug()
    logging.info()
    logging.warning()
    logging.error()
    logging.critical()

    logging模块将日志分为五种级别
  为什么要分级别,是为了在后期查看日志的时候方便定位
    logging的默认显示级别为WARNING,低于WARNING级别的都不会显示
  默认输出位置是终端
    默认的输出格式WARNING(级别):root(日志生成器的名字):warning(输出的日志消息)

  修改默认行为
    日志模块中的四种角色
      1.logger 日志生成器 生成一条日志
      2.filte 日志的过滤器 对logger生成的日志进行过滤(需要涉及到面向对象)
      3.formatter 处理格式的 设置日志的输出格式
      4.handler 处理器 最终负责将日志输出到指定位置


定义生成器
可以为生成器指定名字 是因为可以存放在多个生成器
# 设置日志级别
# logging模块内部使用整数区分级别
# 此处可以直接写对应整数,但是建议写常量
logger.setLevel(logging.WARNING)
# logger.warning('这是一个警告信息')
# 创建一个处理器
handler = logging.FileHandler('test.log', 'a', encoding='utf-8')

fmt = logging.Formatter('%(asctime)s-%(name)s-%(filename)s-%(message)s')
handler.setFormatter(fmt)
# 将addHandler与生成器绑定
# 可以为一个生成器指定多个处理器
logger.addHandler(handler)
logger.error('这是一个错误')
编写代码来自定日志配置
1.获取生成器
2.格式处理器
3.创建handler处理器
4.将handler与格式处理器绑定
5.把handler生成绑定

# 通过字典配置日志模块

每次都要编写代码来配置非常麻烦 ,我们可以写一个完整的配置保存起来,一遍后续直接使用

```python
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字

simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'

id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
logfile_path = "dd.log"

LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {},
'handlers': {
#打印到终端的日志
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
#打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': logfile_path, # 日志文件
'maxBytes': 1024*1024*5, # 日志大小 5M
'backupCount': 5,
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
'loggers': {
#logging.getLogger(__name__)拿到的logger配置
'': {
'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)传递
},
},
}

猜你喜欢

转载自www.cnblogs.com/ShenJunHui6/p/10303900.html