python实现自定义日志的具体方法


Posted in Python onMay 28, 2021

1、导入logging模块:

import logging

2、创建日志收集器:

logger = logging.getLogger(“日志收集器的name”)

3、设置日志收集器的日志级别:

logger.setLevel(logging.INFO) #设置收集器的级别为INFO。

4、给日志收集器创建输出渠道,根据第一部分的内容知:日志输出渠道包含控制台输出和文件输出。

5、设置日志输出的内容格式。

# 设置日志的输出格式
 
fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"
 
formatter = logging.Formatter(fmt)

6、将设置的日志格式绑定到创建的输出渠道中,即将日志格式与输出渠道关联起来。

7、将设置好的输出渠道,添加到日志收集器。

实例扩展:

import os
import time
import logging

#返回一个logger实例,如果没有指定name,返回root logger。
# 只要name相同,返回的logger实例都是同一个而且只有一个,即name和logger实例是一一对应的。
# 这意味着,无需把logger实例在各个模块中传递。只要知道name,就能得到同一个logger实例。
logger = logging.getLogger('mylogger')
# 设置总日志级别, 也可以给不同的handler设置不同的日志级别
#设置logger的level, level有以下几个级别:
# 级别高低顺序:NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL
# 如果把looger的级别设置为INFO, 那么小于INFO级别的日志都不输出, 大于等于INFO级别的日志都输出 
logger.setLevel(logging.DEBUG)

# 控制台日志和日志文件使用同一个formatter,formatter用于描述日志的格式
formatter = logging.Formatter(
	'%(asctime)s - %(filename)s[line:%(lineno)d] - <%(threadName)s %(thread)d>' +
	'- <Process %(process)d> - %(levelname)s: %(message)s'
)
# asctime:日志产生的时间;filename:产生日志的脚本文件名;lineno:该脚本文件哪一行代码产生了日志
# threadName: 当前线程名;thread: 当前进程名;Process进程同thread线程
# levelname: logger的级别;meesage: 具体的日志信息


# 创建Handler, 输出日志到控制台和文件
# 日志文件FileHandler
basedir = os.path.abspath(".") #返回脚本所在的绝对路径
log_dir = os.path.join(basedir, 'logs')  # 日志文件所在目录,即‘脚本路径/logs'
if not os.path.isdir(log_dir):
	os.mkdir(log_dir)
filename = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())) + '.log'  # 日志文件名,以当前时间命名
file_handler = logging.FileHandler(os.path.join(log_dir, filename))  # 创建日志文件handler
file_handler.setFormatter(formatter)  # 设置Formatter
file_handler.setLevel(logging.INFO)  # 单独设置日志文件的日志级别

# 控制台日志StreamHandler
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
# stream_handler.setLevel(logging.INFO)  # 单独设置控制台日志的日志级别,注释掉则使用总日志级别

# 将handler添加到logger中

logger.addHandler(file_handler)
logger.addHandler(stream_handler)

到此这篇关于python实现自定义日志的具体方法的文章就介绍到这了,更多相关python自定义日志如何实现内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中unittest用法实例
Sep 25 Python
基于python编写的微博应用
Oct 17 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
Jan 05 Python
对python数据切割归并算法的实例讲解
Dec 12 Python
Python实现的读取文件内容并写入其他文件操作示例
Apr 09 Python
python3 property装饰器实现原理与用法示例
May 15 Python
Python django搭建layui提交表单,表格,图标的实例
Nov 18 Python
Python semaphore evevt生产者消费者模型原理解析
Mar 18 Python
如何用tempfile库创建python进程中的临时文件
Jan 28 Python
python关于集合的知识案例详解
May 30 Python
使用pipenv管理python虚拟环境的全过程
Sep 25 Python
python 爬取京东指定商品评论并进行情感分析
python b站视频下载的五种版本
May 27 #Python
教你怎么用python selenium实现自动化测试
Python Django框架介绍之模板标签及模板的继承
May 27 #Python
python 算法题——快乐数的多种解法
May 27 #Python
用Python监控你的朋友都在浏览哪些网站?
Python图片处理之图片裁剪教程
You might like
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
Yii CGridView用法实例详解
2016/07/12 PHP
php实现URL加密解密的方法
2016/11/17 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
2016/11/25 PHP
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
javascript基础之查找元素的详细介绍(访问节点)
2013/07/05 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
jquery解析XML字符串和XML文件的方法说明
2014/02/21 Javascript
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
2021/03/01 jQuery
python实现简单ftp客户端的方法
2015/06/28 Python
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
python-pyinstaller、打包后获取路径的实例
2019/06/10 Python
Python turtle绘画象棋棋盘
2019/08/21 Python
python保存log日志,实现用log日志画图
2019/12/24 Python
Html5写一个简单的俄罗斯方块小游戏
2019/12/03 HTML / CSS
瑞贝卡·泰勒官方网站:Rebecca Taylor
2016/09/24 全球购物
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
MYSQL基础面试题
2012/05/13 面试题
土木工程毕业生自荐信
2013/09/21 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
社区关爱留守儿童活动方案
2014/08/22 职场文书
2016教师廉洁教育心得体会
2016/01/13 职场文书
Javascript中的解构赋值语法详解
2021/04/02 Javascript
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS
如何用H5实现好玩的2048小游戏
2022/07/23 HTML / CSS