[PY3]——logging
Posted Jelly_lyj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PY3]——logging相关的知识,希望对你有一定的参考价值。
logging模块的logger、handler、filter、formatter
Logger记录器
提供日志接口,供应用代码使用。logger最长用的操作有两类:配置和发送日志消息。可以通过logging.getLogger(name)获取logger对象,如果不指定name则返回root对象,多次使用相同的name调用getLogger方法返回同一个logger对象。
Handler处理器
将日志记录(log record)发送到合适的目的地(destination),比如文件、socket等。一个logger对象可以通过addHandler方法添加0到多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。下面是几种常见的Handler:
what handler |
描述 |
StreamHandler |
发送log到streams(可以理解为标准输出吧) |
FileHandler |
发送log到文件 |
SoketHandler |
send to TCP/IP Sockets |
DatagramHandler |
send to UDP Sockets |
SMTPHandler |
send to 指定的email地址 |
RotatingFileHandler |
send to文件,支持最大日志文件大小和日志文件轮转 |
TimedRotatingFileHandler |
send to 文件,支持在特定时间内日志文件轮转 |
Formatter格式化器
指定日志记录输出的具体格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。
Filter过滤器
提供一种优雅的方式决定一个日志记录是否发送到handler。
应用实例
# 创建logger对象 logger=logging.getLogger(\'AppName\') # 指定日志输出格式 formatter=logging.Formatter(\'%(asctime)s %(name)s %(levelname)s : %(message)s\') # 创建FileHandler,并指定其输出格式为formatter file_handler=logging.FileHandler("/tmp/test.log") file_handler.setFormatter(formatter) # 创建StreamHandler,并指定其输出格式为formatter console_handler=logging.StreamHandler(sys.stdout) console_handler.setFormatter(formatter) # 为logger添加日志处理器(Handler),1个logger可以有N个Handler logger.addHandler(file_handler) logger.addHandler(console_handler) # 设置logger的最低输出级别 logger.setLevel(logging.INFO) logger.debug(\'debug message\') logger.info(\'info message\') logger.warning(\'warring message\') logger.error(\'error message\') logger.fatal(\'fatal message=critical message\') logger.critical(\'critical message\') # 移除日志处理器 logger.removeHandler(file_handler)
logging配置的几种方法
logging.GetLogger( )
其使用方法参考上面的实例。
默认的logger名称是“root”。如果在同一个程序中都使用同名的logger,其实会拿到同一个实例。这个技巧可以实现跨模块调用同样的logger记录日志。
也可以通过日志名称来区分同一程序的不同模块。
logging.basicConfig( )
1. basicConfig中常用的参数如下:
Format
描述
filename
将log信息输出到文件,filename指定文件位置
filemode
打开日志文件的mode,默认是“a”
format
指定日志输出的格式
datefmt
指定日期/时间格式(即类似time模块的格式化格式)
level
设置日志最低输出级别
style
stream
handlers
2. format常用的输出如下:
format
描述
%(levelno)s
打印日志级别的数值
%(levelname)s
打印日志级别名称
%(pathname)s
打印当前执行程序的路径
%(name)s
打印日志名
%(filename)s
打印当前日志输出函数的模块的文件名
%(funcName)s
打印日志的当前函数
%(asctime)s
打印日志的时间
%(thread)d
打印线程id
%(threadName)s
打印线程名称
%(process)d
打印进程ID
%(message)s
打印日志信息
%(lineno)d
打印日志的当前行号
3. 实例
logging.basicConfig(filename=\'/tmp/log.txt\',level=logging.INFO,format=\'%(asctime)s %(levelname)s [%(threadName)s] %(message)s\') logging.debug(\'debug message\') logging.info(\'info message\') logging.warning(\'warring message\') logging.error(\'error message\') logging.critical(\'critical message\') # cat /tmp/log.txt 2017-09-01 11:24:43,056 INFO [MainThread] info message 2017-09-01 11:24:43,056 WARNING [MainThread] warring message 2017-09-01 11:24:43,056 ERROR [MainThread] error message 2017-09-01 11:24:43,056 CRITICAL [MainThread] critical message
通过配置文件进行配置,使用fileConfig()函数读取配置文件
通过配置字典进行配置,使用dictConfig()函数读取配置信息
通过网络进行配置,使用listen()函数进行网络配置
In [1]: import logging In [2]: import importlib In [3]: importlib.reload(logging) Out[3]: <module \'logging\' from \'/root/.pyenv/versions/3.5.2/lib/python3.5/logging/__init__.py\'>
以上是关于[PY3]——logging的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情