python日志模块----logging
使用Python的logging模块能很好的帮我们完成程序的日志功能,其实它跟Java中的log4j有不少相似的地方。下面记录下今天学习到的logging的知识(因为有一些还没真正使用过,不知道是否说得对,希望大家看到有说的不对的地方可以告诉下小弟,谢谢!)。
1)像其它的语言那样,python里的logging信息同样也是分为5个等级,从低到高依次是:DEBUG,INFO,WARNING,ERROR,CRITICAL
2)python中,logging由logger,handler,filter,formater四个部分组成,logger是提供我们记录日志的方法;handler是让我们选择日志的输出地方,如:控制台,文件,邮件发送等,一个logger添加多个handler;filter是给用户提供更加细粒度的控制日志的输出内容;formater用户格式化输出日志的信息。
3)logger的级别划分,python中, root是默认的最高级别的,其它的logger的级别通过"."来划分等级,如:bao,bao.a,bao.b三个logger,bao.a和bao.b都的级别都低于bao,依此类推。
4)python中配置logging有三种方式:
第一 、在程序中完成logger,handler,filter,formater的实例化被配置好logging,然后再使用logging取得logger进行日志操作。
第二 、使用配置文件的方式配置logging,使用fileConfig(filename,defaults=None,disable_existing_loggers=Ture )函数来读取配置文件。
第三 、使用一个字典方式来写配置信息,然后使用dictConfig(dict,defaults=None,disable_existing_loggers=Ture )函数来瓦按成logging的配置 。(这个方式没有仔细看,所以没有怎么说,具体可以看文档)
注意: 在使用第二种和三种方式配置logging的时候,第三个参数默认值是True,当它为True的时候,在这之前定义的logging配置就是失效,不能再使用,也就是只有配置文件或者配置字典里有的内容才能使用。如果先让之前的logging配置依然有限就要把这个参数设为False,或者一直就是使用配置文件或者配置字典的方式来对logging进行配置。
下面我们使用代码logging的代码来说明:
使用baseConfig()函数对 logging进行 简单的 配置:
![](http://ccyl.iteye.com/images/icon_star.png)
- import logging;
- # 使用baseConfig()函数,可选参数有filename,filemode,format,datefmt,level,stream
- # 有filename是文件日志输出,filemode是'w'的话,文件会被覆盖之前生成的文件会被覆盖。datafmt参数用于格式化日期的输出
- logging.basicConfig(filename="config.log",filemode="w",format="%(asctime)s-%(name)s-%(levelname)s-%(message)s",level=logging.INFO);
- logger = logging.getLogger("log_demo");
- # 使用logger输出日志信息
- logger.debug("debug");
- logger.info("info");
- logger.warning("warning");
- logger.error("error");
- logger.critical("critiacl");
通过初始化logger,handler,formater来配置logging:
![](http://ccyl.iteye.com/images/icon_star.png)
- import logging;
- # logging模块由logger,handler,filter,fomatter四个部分组成
- # 获取一个logger对象
- logger = logging.getLogger("haha");
- # 设置日志输出等级
- logger.setLevel(logging.DEBUG);
- # 创建一个文件的handler
- f_handler = logging.FileHandler("xxx.log");
- f_handler.setLevel(logging.INFO);
- # 创建一个控制台的handler
- c_handler = logging.StreamHandler();
- c_handler.setLevel(logging.WARNING);
- # 设置日志的输出格式
- fmt = logging.Formatter("%(asctime)s-%(name)s-%(levelname)s-%(message)s");
- # 给handler绑定一个fomatter类
- f_handler.setFormatter(fmt);
- c_handler.setFormatter(fmt);
- # 绑定一个handler
- logger.addHandler(f_handler);
- logger.addHandler(c_handler);
- # 使用logger输出日志信息
- logger.debug("debug");
- logger.info("info");
- logger.warning("warning");
- logger.error("error");
- logger.critical("critiacl");
使用配置文件实现logging的配置:
![](http://ccyl.iteye.com/images/icon_star.png)
- import logging
- import logging.config
- # 使用配置文件配置logging
- logging.config.fileConfig("config.conf");
- logger = logging.getLogger("simpleExample");
- # 使用logger
- logger.debug("debug");
- logger.info("info");
- logger.warning("warning");
- logger.error("error");
- logger.critical("critiacl");
与之对应的配置文件内容如下:
![](http://ccyl.iteye.com/images/icon_star.png)
- [loggers]
- keys=root,simpleExample
- [handlers]
- keys=consoleHandler,fileHandler
- [formatters]
- keys=simpleFormatter
- [logger_root]
- level=DEBUG
- handlers=consoleHandler
- [logger_simpleExample]
- level=DEBUG
- handlers=consoleHandler,fileHandler
- qualname=simpleExample
- propagate=0
- [handler_consoleHandler]
- class=StreamHandler
- level=DEBUG
- formatter=simpleFormatter
- args=(sys.stdout,)
- [handler_fileHandler]
- class=FileHandler
- level=WARNING
- formatter=simpleFormatter
- args=("file_config_log.log", "a")
- [formatter_simpleFormatter]
- format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
- datefmt=
上面的配置文件中:由[loggers],[handlers],[formaters] 信息,keys对应实例化是他们的名称,多个用逗号隔开。然后再分别配置各个logger,handler,formaters。以logger为例,logger下有root和simpleExample两个logger,就要配置[logger_root]和[logger_simpleExample];类似的,handler和formater也是这样。
在[logger_name] 中的参数purlname ,是设置logging.getLoger(name)中的name值;propagete参数 :propagete=0,表示输出日志,但消息不传递;propagate=1是输出日志,同时消息往更高级别的地方传递。若上面配置文件参数progagate=1,simpleExample的更高级logger有root,输出的结果会是:
![](http://ccyl.iteye.com/images/icon_star.png)
- 2012-08-06 23:07:18,483 - simpleExample - DEBUG - debug
- 2012-08-06 23:07:18,483 - simpleExample - DEBUG - debug
- 2012-08-06 23:07:18,483 - simpleExample - INFO - info
- 2012-08-06 23:07:18,483 - simpleExample - INFO - info
- 2012-08-06 23:07:18,483 - simpleExample - WARNING - warning
- 2012-08-06 23:07:18,483 - simpleExample - WARNING - warning
- 2012-08-06 23:07:18,483 - simpleExample - ERROR - error
- 2012-08-06 23:07:18,483 - simpleExample - ERROR - error
- 2012-08-06 23:07:18,483 - simpleExample - CRITICAL - critiacl
- 2012-08-06 23:07:18,483 - simpleExample - CRITICAL - critiacl
最后是 [hander_name] 配置下的args参数,其实就是你使用的handler类型的初始化函数的参数。
python日志模块----logging相关推荐
- Python日志模块logging高级用法
推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年12月第11次印刷,山东省一流 ...
- python logging模块的作用_【python】【logging】python日志模块logging常用功能
logging模块:应用程序的灵活事件日志系统,可以打印并自定义日志内容 logging.getLogger 创建一个log对象 >>> log1=logging.getLogger ...
- Python日志模块logging,这一篇就够了
橙好科技logging模块教程 文章目录 1-logging介绍 2-日志作用 3-日志配置basicConfig 3-日志级别level 4-日志格式format 4-输出日志到控制台 5-输出 ...
- python 日志模块 logging
如何使用python自带的 logging 模块实现日志功能 1.初始化一个logger对象 1)引入模块 import os import logging import sys 2)初始化变量,声明 ...
- Python:日志模块logging的应用
2019独角兽企业重金招聘Python工程师标准>>> 在Python中,上面以实现的和已经实现的,均可以使用logging模块迅速搞定,且仅仅只需要一个配置文件,两行代码,实现过程 ...
- python logging模块的作用_Python 日志模块logging分析及使用-2
本文作为Python日志模块的补充,主要介绍日志回滚RotatingFileHandler和TimedRotatingFileHandler的使用,以及其所带来的问题.Logger对象的日志等级是如何 ...
- Python之配置日志模块logging
一.定义日志打印方式 如果我们运行自己的程序,有时候需要记录程序运行过程中出现的问题或者信息.可以运用日志模块logging来记录,该模块日志格式可以根据用户需求来自己定义. 常见打印日志信息形式如下 ...
- Python的日志模块logging的使用
Python的日志模块logging的使用 1 logging模块介绍 2 logging 简单示例 3 logging.basicConfig() 4 logging组件 4.1 Logger类 4 ...
- 【Python】—日志模块logging使用详解1
文章目录 1.日志级别 2.logging流程 3.几个重要的类 3.1 Logger类 1) 最常用的配置方法 2) 创建`Logger`对象`logging.getLogger([name])` ...
最新文章
- C++ int与string的相互转换(含源码实现)
- 关于iOS知识的提升
- MATLAB之find函数用法
- python缩进符错误_python – 如何修复Pylint“错误的缩进”和PEP8 E121?
- 你有做 Code Review 吗?
- [vue] 你知道vue中key的原理吗?说说你对它的理解
- 带有示例的Python date strftime()方法
- php自学目录,PHP学习笔记(二) 了解PHP的基本语法以及目录结构
- Linux下Nodejs安装
- 原子变量, 无锁定且无等待算法
- JavaScript的学习--生成二维码
- android6.0系统Healthd深入分析
- 今日头条 java笔试题_今日头条笔试第一题
- oracle 漏洞补丁修复,Oracle发布41个安全补丁 修复产品严重漏洞
- grid 与axis
- 什么是软件危机?它有哪些典型表现?为什么会出现软件危机?
- Dart Isolate
- ansible之when条件语法、处理任务失败、jinja2模板和项目管理
- 【加密与解密】C#如何读取pem的KEY文件
- C语言手机通讯录系统
热门文章
- 大数据的说法 正确的是_数据量——让数据分析师永远头疼的指标
- 校招应聘产品经理,怎么准备?网易大佬来回答
- 《统计学习方法》(李航)读书笔记(完结)超级火爆的总结
- Mac安装Python我觉得靠谱的方法
- M面试题-HTTPS和HTTP的区别
- Visual studio 的教程
- vue.js koa2 mysql_nodejs-koa2-mysql-sequelize-jwt
- 老师也不是什么好东西
- 腾讯将被“重锤”?腾讯股价应声下跌逾5%!造谣原博主销号跑路
- 拼多多12.12“全民真香节”启动 “真香”农货成为核心与亮点