下面我们使用代码logging的代码来说明:

使用baseConfig()函数对 logging进行 简单的 配置:

  1. import logging;
  2. # 使用baseConfig()函数,可选参数有filename,filemode,format,datefmt,level,stream
  3. # 有filename是文件日志输出,filemode是'w'的话,文件会被覆盖之前生成的文件会被覆盖。datafmt参数用于格式化日期的输出
  4. logging.basicConfig(filename="config.log",filemode="w",format="%(asctime)s-%(name)s-%(levelname)s-%(message)s",level=logging.INFO);
  5. # 使用logging输出日志信息
  6. logging.debug("debug");
  7. logging.info("info");
  8. logging.warning("warning");
  9. logging.error("error");
  10. logging.critical("critiacl");

通过初始化logger,handler,formater来配置logging:

  1. import logging;
  2. # logging模块由logger,handler,filter,fomatter四个部分组成
  3. # 获取一个logger对象
  4. logger = logging.getLogger("haha");
  5. # 设置日志输出等级
  6. logger.setLevel(logging.DEBUG);
  7. # 创建一个文件的handler
  8. f_handler = logging.FileHandler("xxx.log");
  9. f_handler.setLevel(logging.INFO);
  10. # 创建一个控制台的handler
  11. c_handler = logging.StreamHandler();
  12. c_handler.setLevel(logging.WARNING);
  13. # 设置日志的输出格式
  14. fmt = logging.Formatter("%(asctime)s-%(name)s-%(levelname)s-%(message)s");
  15. # 给handler绑定一个fomatter类
  16. f_handler.setFormatter(fmt);
  17. c_handler.setFormatter(fmt);
  18. # 绑定一个handler
  19. logger.addHandler(f_handler);
  20. logger.addHandler(c_handler);
  21. # 使用logger输出日志信息
  22. logger.debug("debug");
  23. logger.info("info");
  24. logger.warning("warning");
  25. logger.error("error");
  26. logger.critical("critiacl");

使用配置文件实现logging的配置:

  1. import logging
  2. import logging.config
  3. # 使用配置文件配置logging
  4. logging.config.fileConfig("config.conf");
  5. logger = logging.getLogger("simpleExample");
  6. # 使用logger
  7. logger.debug("debug");
  8. logger.info("info");
  9. logger.warning("warning");
  10. logger.error("error");
  11. logger.critical("critiacl");

与之对应的配置文件内容如下:

  1. [loggers]
  2. keys=root,simpleExample
  3. [handlers]
  4. keys=consoleHandler,fileHandler
  5. [formatters]
  6. keys=simpleFormatter
  7. [logger_root]
  8. level=DEBUG
  9. handlers=consoleHandler
  10. [logger_simpleExample]
  11. level=DEBUG
  12. handlers=consoleHandler,fileHandler
  13. qualname=simpleExample
  14. propagate=0
  15. [handler_consoleHandler]
  16. class=StreamHandler
  17. level=DEBUG
  18. formatter=simpleFormatter
  19. args=(sys.stdout,)
  20. [handler_fileHandler]
  21. class=FileHandler
  22. level=WARNING
  23. formatter=simpleFormatter
  24. args=("file_config_log.log", "a")
  25. [formatter_simpleFormatter]
  26. format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
  27. 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,输出的结果会是:

  1. 2012-08-06 23:07:18,483 - simpleExample - DEBUG - debug
  2. 2012-08-06 23:07:18,483 - simpleExample - DEBUG - debug
  3. 2012-08-06 23:07:18,483 - simpleExample - INFO - info
  4. 2012-08-06 23:07:18,483 - simpleExample - INFO - info
  5. 2012-08-06 23:07:18,483 - simpleExample - WARNING - warning
  6. 2012-08-06 23:07:18,483 - simpleExample - WARNING - warning
  7. 2012-08-06 23:07:18,483 - simpleExample - ERROR - error
  8. 2012-08-06 23:07:18,483 - simpleExample - ERROR - error
  9. 2012-08-06 23:07:18,483 - simpleExample - CRITICAL - critiacl
  10. 2012-08-06 23:07:18,483 - simpleExample - CRITICAL - critiacl

最后是 [hander_name] 配置下的args参数,其实就是你使用的handler类型的初始化函数的参数

logging 日志两种使用方法(转)的更多相关文章

  1. angular2系列教程(十)两种启动方法、两个路由服务、引用类型和单例模式的妙用

    今天我们要讲的是ng2的路由系统. 例子

  2. git两种合并方法 比较merge和rebase

    18:01 2015/11/18git两种合并方法 比较merge和rebase其实很简单,就是合并后每个commit提交的id记录的顺序而已注意:重要的是如果公司用了grrit,grrit不允许用m ...

  3. 两种Ajax方法

    两种Ajax方法 Ajax是一种用于快速创建动态网页的技术,他通过在后台与服务器进行少量的数据交换,可以实现网页的异步更新,不需要像传统网页那样重新加载页面也可以做到对网页的某部分作出更新,现在这项技 ...

  4. mysql in 的两种使用方法

    简述MySQL 的in 的两种使用方法: 他们各自是在 in keyword后跟一张表(记录集).以及在in后面加上字符串集. 先讲后面跟着一张表的. 首先阐述三张表的结构: s(sno,sname. ...

  5. C#中的两种debug方法

    这篇文章主要介绍了C#中的两种debug方法介绍,本文讲解了代码用 #if DEBUG 包裹.利用宏定义两种方法,需要的朋友可以参考下   第一种:需要把调试方法改成debug代码用 #if DEBU ...

  6. Service的两种启动方法

    刚才看到一个ppt,介绍service的两种启动方法以及两者之间的区别. startService 和 bindService startService被形容为我行我素,而bindService被形容 ...

  7. jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)

    在asp.net webForm开发中,用Jquery ajax调用aspx页面的方法常用的有两种:下面我来简单介绍一下. [WebMethod] public static string SayHe ...

  8. android studio gradle 两种更新方法更新

    android studio gradle 两种更新方法更新 第一种.Android studio更新 第一步:在你所在项目文件夹下:你项目根目录gradlewrappergradle-wrapper ...

  9. iOS学习——UITableViewCell两种重用方法的区别

    今天在开发过程中用到了UITableView,在对cell进行设置的时候,我发现对UITableViewCell的重用设置的方法有如下两种,刚开始我也不太清楚这两种之间有什么区别.直到我在使用方法二进 ...

随机推荐

  1. 【python】python获取当前日期前后N天或N月的日期

    # -*- coding: utf- -*- '''获取当前日期前后N天或N月的日期''' from time import strftime, localtime from datetime imp ...

  2. oracle分区技术提高查询效率

    概述: 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区.表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件 ...

  3. SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase

    sqlserver 插入数据的时候 插入失败,报错内容为 “SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, ...

  4. Dubbo入门介绍---搭建一个最简单的Demo框架

    Dubbo入门---搭建一个最简单的Demo框架 置顶 2017年04月17日 19:10:44 是Guava不是瓜娃 阅读数:320947 标签: dubbozookeeper 更多 个人分类: D ...

  5. yum命令Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY

    yum命令Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY 博客分类: linux   三种解决方案 我采取第三种方案解决的 第一种: linu ...

  6. 移动端H5滚动穿透解决方案

    最近遇到一个很 巨恶心的问题  ios10下面 页面弹窗有滚动穿透问题 各种google 终于找到了答案,但是体验还不是很好,基本能忍受 废话不多说,上方法 最后终于想到一个处理方案,就是第一种方案的 ...

  7. 前缀统计 [Trie]

    前缀统计 描述 给定N个字符串S1,S2...SN,接下来进行M次询问,每次询问给定一个字符串T,求S1-SN中有多少个字符串是T的前缀.输入字符串的总长度不超过10^6,仅包含小写字母. 输入格式 ...

  8. white-space——处理元素内的空白

      定义和用法 white-space 属性设置如何处理元素内的空白.这个属性声明建立布局过程中如何处理元素中的空白符.值 pre-wrap 和 pre-line 是 CSS 2.1 中新增的. 默认 ...

  9. 计算机网络中七层,五层,四层协议;IP 地址子网划分

    七层协议: 7 应用层(http) 6 表示层(上层用户可以相互识别的数据:jpg) 5 会话层(不同主机不同线程间的通信) 4 运输层(tcp/ip:传输层提供端到端的透明数据服务)/差错控制和流量 ...

  10. codevs 3305 水果姐逛水果街Ⅱ&&codevs3006

    题目描述 Description 水果姐第二天心情也很不错,又来逛水果街. 突然,cgh又出现了.cgh施展了魔法,水果街变成了树结构(店与店之间只有一条唯一的路径). 同样还是n家水果店,编号为1~ ...