logging 日志两种使用方法(转)
下面我们使用代码logging的代码来说明:
使用baseConfig()函数对 logging进行 简单的 配置:
- 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);
- # 使用logging输出日志信息
- logging.debug("debug");
- logging.info("info");
- logging.warning("warning");
- logging.error("error");
- logging.critical("critiacl");
通过初始化logger,handler,formater来配置logging:
- 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的配置:
- 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");
与之对应的配置文件内容如下:
- [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,输出的结果会是:
- 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类型的初始化函数的参数
logging 日志两种使用方法(转)的更多相关文章
- angular2系列教程(十)两种启动方法、两个路由服务、引用类型和单例模式的妙用
今天我们要讲的是ng2的路由系统. 例子
- git两种合并方法 比较merge和rebase
18:01 2015/11/18git两种合并方法 比较merge和rebase其实很简单,就是合并后每个commit提交的id记录的顺序而已注意:重要的是如果公司用了grrit,grrit不允许用m ...
- 两种Ajax方法
两种Ajax方法 Ajax是一种用于快速创建动态网页的技术,他通过在后台与服务器进行少量的数据交换,可以实现网页的异步更新,不需要像传统网页那样重新加载页面也可以做到对网页的某部分作出更新,现在这项技 ...
- mysql in 的两种使用方法
简述MySQL 的in 的两种使用方法: 他们各自是在 in keyword后跟一张表(记录集).以及在in后面加上字符串集. 先讲后面跟着一张表的. 首先阐述三张表的结构: s(sno,sname. ...
- C#中的两种debug方法
这篇文章主要介绍了C#中的两种debug方法介绍,本文讲解了代码用 #if DEBUG 包裹.利用宏定义两种方法,需要的朋友可以参考下 第一种:需要把调试方法改成debug代码用 #if DEBU ...
- Service的两种启动方法
刚才看到一个ppt,介绍service的两种启动方法以及两者之间的区别. startService 和 bindService startService被形容为我行我素,而bindService被形容 ...
- jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
在asp.net webForm开发中,用Jquery ajax调用aspx页面的方法常用的有两种:下面我来简单介绍一下. [WebMethod] public static string SayHe ...
- android studio gradle 两种更新方法更新
android studio gradle 两种更新方法更新 第一种.Android studio更新 第一步:在你所在项目文件夹下:你项目根目录gradlewrappergradle-wrapper ...
- iOS学习——UITableViewCell两种重用方法的区别
今天在开发过程中用到了UITableView,在对cell进行设置的时候,我发现对UITableViewCell的重用设置的方法有如下两种,刚开始我也不太清楚这两种之间有什么区别.直到我在使用方法二进 ...
随机推荐
- microtime()
PHP函数microtime()返回当前 Unix 时间戳和微秒数.
- 关于如何利用原生js动态给一个空对象添加属性以及属性值
首先,回忆一下,访问对象属性一共有两种方法:点获取法和方括号获取法.而我们最常用的就是点获取法了.但是当我们遇到需要给对象动态添加属性和属性值时,点获取法好像就不太好用了,尤其是我们不知道属性名的时候 ...
- oracle视图就是封装了一条写好的sql语句 可通过视图修改表结构 ; oracle需要手动创建序列
create sequence student_sid; --创建序列 oracle只能通过手动方式创建序列
- 利用FFT来进行字符串匹配
给定串A和串B,A由26个小写字母构成,B由?和26个小写字母构成 ?可以和任意字符匹配 求A中出现了多少次B 这里可以使用fft做法,定义向量A和向量B 然后求A和rev(B)的卷积结果C C的第i ...
- 【题解】SDOI2011消耗战
虚树模板题~洛谷P2495 第一次写虚树,感觉好厉害呀~首先,这道题目的树形dp是非常显然的,要控制一个点&其子树所有点,要么在子树内部割边,要么直接切点该点与父亲的连边.所以dp[u]表示控 ...
- [洛谷P3919]【模板】可持久化数组
题目大意:有两个操作,1:在第x次操作后的版本上修改一个值,2:查询在第x次操作后的版本上的一个节点的值 即: 你需要维护这样的一个长度为N的数组,支持如下几种操作 1.在某个历史版本上修改某一个位置 ...
- 周记【距gdoi:96天】
倒计时从三位数变成了两位数. 然后这周还是很不知道怎么说,经常写一道题写两天.但是总算把后缀数组写完了,也整理完了. 然后周末都不知道干了什么周末就过去了.无聊看了两道省选题发现都是不会做系列,看了以 ...
- VB托盘图标不响应WM_MOUSEMOVE的原因及解决方法
文章参考地址:http://blog.csdn.net/txh0001/article/details/38265895:http://bbs.csdn.net/topics/330106030 网上 ...
- NOIP2010 引水入城 贪心+DFS
我们先把简单的不能搞死,具题意可证:每个蓄水长的管辖区域一定是连续的.证明:既然我们已经能了那么我们就可以说如果这个区间不是连续的那我们取出这个区间中间阻隔开的那一段,那么对于这一整个区间来说水源不可 ...
- Educational Codeforces Round 56 (Rated for Div. 2) ABCD
题目链接:https://codeforces.com/contest/1093 A. Dice Rolling 题意: 有一个号数为2-7的骰子,现在有一个人他想扔到几就能扔到几,现在问需要扔多少次 ...