logging模块配置笔记

log文件的路径

#判断在当前的目录下是否有一个logs文件夹。没有则创建
log_dir = os.path.dirname(os.path.dirname(__file__))+'/logs'
if not os.path.exists(log_dir):
os.mkdir(log_dir)

设定log文件名

#在上述的文件夹生成web.log文件
today=datetime.datetime.now().strftime("%Y%m%d")
log_path = os.path.join(log_dir, f'test_{today}.log')

dictConfig通用参数配置

version版本号
'version': 1.0#固定值1.0
formatters日志格式设置
 'format': formatter的格式,字符串,比如'%(levelname)s-%(message)s'
'datefmt': 日期的输出格式,字符串,比如'%Y-%m-%d %H:%M:%S'
然后看下面一个配置
'formatters': {
'detail': {#detail自定义一个格式名字
'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
'datefmt': "%Y-%m-%d %H:%M:%S"
},
'simple': {#同detail自定义一个格式名字,这里定义另一种格式
'format': '%(name)s - %(levelname)s - %(message)s',
},
}
handlers日志格式设置
然后看下面一个配置
    'handlers': {
'console': {#console是自定义的handlers名字
'class': 'logging.StreamHandler',#构造handler使用的类,字符串,必须使用全路径
'level': 'INFO',#级别
'formatter': 'detail'#上面的detail格式
},
'file': {#file是自定义的handlers名字
'class': 'logging.handlers.RotatingFileHandler',
'maxBytes': 1024 * 1024 * 5,#每个日志文件最大5M,超过之后重新命名一个文件
'backupCount': 10,#最多备份10个日志文件,
'filename': log_path,#上面定义的log文件名
'level': 'INFO',
'formatter': 'detail',
'encoding': 'utf-8',
},
loggers

必须指定一个级别和handlers列表

    'loggers': {
'crawler': {#crawler是自定义的日志对象名字
'handlers': ['console', 'file'],#输出方式
'level': 'DEBUG',#级别
},
'parser': {
'handlers': ['file'],#输出方式
'level': 'INFO',#级别
}
}

以上日志配置综合

log_config = {
'version': 1.0,
'formatters': {
'detail': {
'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
'datefmt': "%Y-%m-%d %H:%M:%S" #如果不加这个会显示到毫秒。
},
'simple': {
'format': '%(name)s - %(levelname)s - %(message)s',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',#日志打印到屏幕显示的类。
'level': 'INFO',
'formatter': 'detail'
},
'file': {
'class': 'logging.handlers.RotatingFileHandler',#日志打印到文件的类。
'maxBytes': 1024 * 1024 * 5, #单个文件最大内存
'backupCount': 10, #备份的文件个数
'filename': log_path, #日志文件名
'level': 'INFO',# 日志等级
'formatter': 'detail', #调用上面的哪个格式
'encoding': 'utf-8', #编码
},
},
'loggers': {
'crawler': {
'handlers': ['console', 'file'],#打印屏幕和写入文件
'level': 'DEBUG',#只显示错误的log
},
'parser': {
'handlers': ['file'],
'level': 'INFO',
},
'other': {
'handlers': ['console', 'file'],
'level': 'INFO',
},
'storage': {
'handlers': ['file'],
'level': 'INFO',
}
}
}

创建日志对象使用

1.通过调用dictConfig(config)方法进行配置,config对象为一个dict

log_conf.dictConfig(log_config)

2.生成不同的日志对象

crawler = logging.getLogger('crawler')
parser = logging.getLogger('parser')

3.打印不同级别的log

常用的两种

crawler.error(错误信息)
crawler.info(字符串)

logging模块配置笔记的更多相关文章

  1. logging模块配置共享以及使用文件配置

    1.配置共享 如果每个文件都配置logging,那就太繁琐了,logging提供了父子模块共享配置的机制, 会根据Logger的名称来自动加载父模块的配置.首先定义一个 main.py 文件: imp ...

  2. 【Python】logging模块学习笔记

    因为做接口自动化测试遇到的一个代码逻辑上的问题,又不知道具体问题出在哪里,所以在模块化代码之前,先学习下python的日志模块logging. 入门1 入门2 日志级别大小关系为:CRITICAL & ...

  3. python logging模块使用流程

    #!/usr/local/bin/python # -*- coding:utf-8 -*- import logging logging.debug('debug message') logging ...

  4. python logging模块使用教程

    简单使用 #!/usr/local/bin/python # -*- coding:utf-8 -*- import logging logging.debug('debug message') lo ...

  5. python之hashlib、configparser、logging模块

    hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数 ...

  6. Python学习笔记——基础篇【第六周】——logging模块

    常用模块之logging 用于便捷记录日志且线程安全的模块 import logging logging.basicConfig(filename='log.log', format='%(ascti ...

  7. Python自学笔记-logging模块详解

    简单将日志打印到屏幕: import logging logging.debug('debug message') logging.info('info message') logging.warni ...

  8. os常用模块,json,pickle,shelve模块,正则表达式(实现运算符分离),logging模块,配置模块,路径叠加,哈希算法

    一.os常用模块 显示当前工作目录 print(os.getcwd()) 返回上一层目录 os.chdir("..") 创建文件包 os.makedirs('python2/bin ...

  9. Python之配置日志的几种方式(logging模块)

    原文:https://blog.csdn.net/WZ18810463869/article/details/81147167 作为开发者,我们可以通过以下3种方式来配置logging: 1)使用Py ...

随机推荐

  1. 【Java】CSVUtils

    package com.msk.ds.logic; import java.io.*; import java.util.List; /** * Created by Administrator on ...

  2. CF530D sum in the tree

    我是题面.原题地址 很简单的一道贪心题 首先,先想想怎么判断是否合法 题目中说,a是自然数,那么子节点的s明显是不能比父节点大的,如果比父节点大,不合法! 所有深度为偶数的点的s被删除了,也只有深度为 ...

  3. LiveCD及Casper调研

    1.LiveCD原理 LiveCD本质上是ISO 9660/El Torito格式的CD-ROM. 下面对LiveCD涉及的各种技术做了简单的调研. 1.1. CD-ROM CD-ROM是一种光盘存储 ...

  4. Oracle 同名字段的该行数据按照创建时间最新的隐藏其他

    1.需求,表  SYS_INFO   的 NAME 字段会重复,按照  创建时间CREATE_AT 字段,取最新一条,其他隐藏 SELECT * FROM (SELECT T.*,ROW_NUMBER ...

  5. Docker学习笔记一:如何在线安装

    一.Docker简介: Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...

  6. 【SPOJ】Count On A Tree II(树上莫队)

    [SPOJ]Count On A Tree II(树上莫队) 题面 洛谷 Vjudge 洛谷上有翻译啦 题解 如果不在树上就是一个很裸很裸的莫队 现在在树上,就是一个很裸很裸的树上莫队啦. #incl ...

  7. KinFu --- KinectFusion的开源实现

    KinectFusion是微软研究院的一个项目,研究用Kinect来实时地重构3D表面,最终用于人机交互. 先看视频:http://research.microsoft.com/en-us/proje ...

  8. python基础----内置函数----匿名函数(lambda)

    Python3版本所有的内置函数: 1. abs() 获取绝对值 >>> abs(-) >>> abs() >>> abs() >>& ...

  9. Qt ------ QTabWidget

    下图: 1.长方形的 objectName 可写可不写,不写就作用于所有 QTabWidget:椭圆形的 QTabWidget#tabWidget 要么四个都要写,要么四个都不写 2.下图的 CSS ...

  10. 前端端对端测试:基于PhantomJS的CasperJS

    简介 Casperjs是一个基于PhantomJS和SlimerJS的前端端对端测试框架,当然你也可以使用它完成网络爬虫功能,它的特点的通过简单的脚本模拟浏览器行为, 主要有casper.tester ...