day⑥:logging模块

The logging library takes a modular approach and offers several categories of components: loggers, handlers, filters, and formatters.
? Loggers expose the interface that application code directly uses.
? Handlers send the log records (created by loggers) to the appropriate destination.
? Filters provide a finer grained facility for determining which log records to output.
? Formatters specify the layout of log records in the final output.

logger:提供日志接口,供应用代码使用。logger最长用的操作有两类:配置和发送日志消息。可以通过logging.getLogger(name)获取logger对象,如果不指定name则返回root对象,多次使用相同的name调用getLogger方法返回同一个logger对象。
handler:将日志记录(log record)发送到合适的目的地(destination),比如文件,socket等。一个logger对象可以通过addHandler方法添加0到多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。
filter:提供了过滤日志信息的方法,。
formatter:指定日志记录输出的具体格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。

说说最常用logging的函数或者类:
①logging.getLogger([name])
返回一个logger实例,如果没有name,返回root logger
如果name相同那么是同一个logger的实例

②Logger.setLevel(level)
日志级别大小关系为: critical > error > warning > info > debug > notset 也可自定义日志级别
logger.debug("xxx")
logger.info("xxx")
logger.warning("xxx")
logger.error("xxx")
logger.critical("xxx")

③Logger.addHandler(hdlr)
logger可以雇佣handler来帮它处理日志, handler主要有以下几种:
StreamHandler: 输出到控制台
FileHandler: 输出到文件
handler还可以设置自己的level以及输出格式。

④logging.basicConfig([**kwargs])
* 这个函数用来配置root logger, 为root logger创建一个StreamHandler,
设置默认的格式。
* 这些函数: logging.debug()、logging.info()、logging.warning()、
logging.error()、logging.critical() 如果调用的时候发现root logger没有任何
handler, 会自动调用basicConfig添加一个handler
* 如果root logger已有handler, 这个函数不做任何事情

logging.basicConfig # 通过logging.basicConfig函数对日志的输出格式及方式做相关配置
# basicConfig 相关参数帮助
filename # 指定日志文件名
filemode # 和file函数意义相同,指定日志文件的打开模式,‘w‘或‘a‘
datefmt # 指定时间格式,同time.strftime()
level # 设置日志级别,默认为logging.WARNING
stream # 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略
format # 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
%(levelno)s # 打印日志级别的数值
%(levelname)s # 打印日志级别名称
%(pathname)s # 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s # 打印当前执行程序名
%(funcName)s # 打印日志的当前函数
%(lineno)d # 打印日志的当前行号
%(asctime)s # 打印日志的时间
%(thread)d # 打印线程ID
%(threadName)s # 打印线程名称
%(process)d # 打印进程ID
%(message)s # 打印日志信息

例子:
logging.basicConfig(level=logging.DEBUG,
format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,
datefmt=‘%a, %d %b %Y %H:%M:%S‘,
filename=‘myapp.log‘,
filemode=‘w‘)

实践例子:

  1. 一.直接在程序中定义Logger、Handler、Fiter、Formatter:
  2. [[email protected] logging]# vim test2.py
  3. #!/usr/bin/python
  4. #coding=utf-8
  5. import logging
  6. #创建一个logger
  7. logger1 = logging.getLogger(‘yaobin‘)
  8. logger1.setLevel(logging.DEBUG) #全局的日志水平,最高,奇葩东西,应该单独最高的,不然我单独设置日志水平没意义了。
  9. #创建一个handler,用于写入日志文件创建一个handler,用于写入日志文件
  10. fh = logging.FileHandler(‘/tmp/test.log‘)
  11. fh.setLevel(logging.DEBUG) #单独设置日志水平
  12. #再创建一个handler,用于输出到控制台,即是屏幕
  13. ch = logging.StreamHandler()
  14. ch.setLevel(logging.WARNING) #单独设置日志水平
  15. #最后我发现单独设置的日志水平比全局的高,生效单独的日志水平
  16. #单独设置的日志水平比全局的低,生效全局的日志水平
  17. # 定义handler的输出格式formatter
  18. formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)
  19. fh.setFormatter(formatter)
  20. ch.setFormatter(formatter)
  21. #给logger添加handler
  22. logger1.addHandler(fh)
  23. logger1.addHandler(ch)
  24. #记录日志
  25. logger1.debug(‘logger1 debug message‘)
  26. logger1.info(‘logger1 info message‘)
  27. logger1.warning(‘logger1 warning message‘)
  28. logger1.error(‘logger1 error message‘)
  29. logger1.critical(‘logger1 critical message‘)
  30. #执行脚本
  31. [[email protected] logging]# python test2.py #马上就有屏幕的输出
  32. 2015-12-15 17:38:52,024 - yaobin - DEBUG - logger1 debug message
  33. 2015-12-15 17:38:52,024 - yaobin - INFO - logger1 info message
  34. 2015-12-15 17:38:52,025 - yaobin - WARNING - logger1 warning message
  35. 2015-12-15 17:38:52,025 - yaobin - ERROR - logger1 error message
  36. 2015-12-15 17:38:52,025 - yaobin - CRITICAL - logger1 critical message
  37. #查看文件的记录
  38. [[email protected]_monitor logging]# cat /tmp/test.log
  39. 2016-02-25 19:37:20,718 - yaobin - DEBUG - logger1 debug message
  40. 2016-02-25 19:37:20,719 - yaobin - INFO - logger1 info message
  41. 2016-02-25 19:37:20,719 - yaobin - WARNING - logger1 warning message
  42. 2016-02-25 19:37:20,719 - yaobin - ERROR - logger1 error message
  43. 2016-02-25 19:37:20,720 - yaobin - CRITICAL - logger1 critical message

来自为知笔记(Wiz)

时间: 2024-10-12 20:36:47

day⑥:logging模块的相关文章

28.logging模块

logging模块 用于便捷记录日志且线程安全的模块 1.单文件日志 import logging logging.basicConfig(filename='log.log', format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', level=10) logging.debug('debug') logging.info('info')

day6 subprocess模块、logging模块

    logging模块 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug(), info(), warning(), error() and critical() 5个级别,下面我们看一下怎么用:

Python中的日志管理Logging模块

1.基本的用法 import logging logging.debug('This is debug message') logging.info('This is info message') logging.warning('This is warning message') 屏幕上打印: WARNING:root:This is warning message 默认情况下,logging将日志打印到屏幕,日志级别为WARNING:日志级别大小关系为:CRITICAL > ERROR >

logging模块讲解

logging模块 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug(), info(), warning(), error() and critical() 5个级别,级别从左到右依次递增,下面我们看一下怎么用. 把日志写入到文件,并设置日志级别为logging.INFO import logging logging

logging模块

函数式的简单配置 默认情况下python的logging模块打印日志的标准输出顺序是CRITICAL > ERROR > WARNING > INFO > DEBUG,默认的日志格式为日志级别:Logger名称:用户输出消息. import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message

python os,sys,logging模块的使用

os模块 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os.curdir 返回当前目录: ('.') os.pardir 获取当前目录的父目录字符串名:('..') os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此

python中logging模块的使用

一.基本用法 只需要基本的配置,就可以使用了. import logging def fun2(): logging.basicConfig(filename="fun2.log",format="%(asctime)s %(message)s",level=logging.DEBUG) logging.debug("this is fun2 log") 二.进行详细配置 首先添加一个fileHandler来配置记录的文件,Formatter来设

python logging模块

很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug(), info(), warning(), error() and critical() 5个级别,下面我们看一下怎么用. 1 import logging 2 logging.debug('debug message') 3 logging.info('info me

Python基础(12)_python模块之sys模块、logging模块、序列化json模块、pickle模块、shelve模块

5.sys模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称 5.1 使用sys.argv进行登录判断,跳过 i/o阻塞 #使用sys.argv进行登录判断,跳过 i/o阻塞 import s

python 的日志logging模块学习

最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stackoverflow上查询到的一些内容. 官方文档 技术博客 基本用法 下面的代码展示了logging最基本的用法. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 # -*- cod