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. 【bzoj5028】小Z的加油店 扩展裴蜀定理+差分+线段树

    题目描述 给出 $n$ 个瓶子和无限的水,每个瓶子有一定的容量.每次你可以将一个瓶子装满水,或将A瓶子内的水倒入B瓶子中直到A倒空或B倒满.$m$ 次操作,每次给 $[l,r]$ 内的瓶子容量增加 $ ...

  2. eclipse启动报错: No Java virtual machine

    在 scala-ide下载集成scala包的eclipse版本使用,启动时报错: A java runtime environment (JRE) or java development kit (J ...

  3. C 程序结构——Day01

    C Hello World 实例 C 程序主要包括以下部分: 预处理器指令 函数 变量 语句 & 表达式 注释 让我们看一段简单的代码,可以输出单词 "Hello World&quo ...

  4. Spring Boot系列教程一:Eclipse安装spring-tool-suite插件

    一.前言        一直使用eclipse,个人习惯选用Eclipse+spring-tool-suite进行开发,特别注意Eclipse要选用对应的spring-tool-suite进行安装,这 ...

  5. 洛谷 P3648 [APIO2014]序列分割 解题报告

    P3648 [APIO2014]序列分割 题目描述 你正在玩一个关于长度为\(n\)的非负整数序列的游戏.这个游戏中你需要把序列分成\(k+1\)个非空的块.为了得到\(k+1\)块,你需要重复下面的 ...

  6. Linux内核分析7

    一.理论知识 Linux中,可以从c源代码生产一个可执行程序,这其中要经过预处理.编译和链接的过程.可以参考以下图来理解这个过程: 其中,目标文件中至少有编译后的机器指令代码.数据,也还包括了链接时所 ...

  7. oracle中的substr()函数

    SUBSTR(cExpression,nStartPosition [,nCharactersReturned])其中,cExpression指定要从其中返回字符串的字符表达式或备注字段:nStart ...

  8. Ubuntu 使用Compiz配置炫酷3D桌面

    先看一下效果 要实现这种3D 的效果其实很简单. Step 1:安装N卡驱动工具 sudo apt- 这个东西其实没有太大的作用. Step 2:安装Compiz sudo apt-get insta ...

  9. bzoj 1528 [POI2005]sam-Toy Cars 堆维护+贪心

    1528: [POI2005]sam-Toy Cars Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 716  Solved: 306[Submit][S ...

  10. 使用rabbitmq消息队列

    一.前言 在python中本身就是存在队列queue.一个是线程队列queue,另一个是进程multiprocessing中的队列Queue. 线程queue:只用于线程之间的数据交互 进程Queue ...