作用:报告状态、错误和信息消息
1、配置级别setLevel
大多数应用都配置为将日志记入文件,使用basicConfig()函数建立默认处理器,从而将调试消息写至一个文件。
import logging
logging.debug(u"苍井空")
logging.info(u"麻生希")
logging.warning(u"小泽玛利亚")
logging.error(u"桃谷绘里香")
logging.critical(u"泷泽萝拉")
这能看到打印后三个,因为默认的root logger的level是logging.WARNING,低于该级别的就不输出了。
级别排序:critical > error > warning > info > debug
如果需要显示低于wanrning级别的内容,setLevel(logging.DEBUG)来显示:
import logging
logger=logging.getLogger()
logger.setLevel(logging.INFO)
logging.debug(u"可以采取debug、info的级别的内容也可以显示在控制台上了")
logging.info(u'info也能显示')
logging.warning(u"小泽玛利亚")
2、常用函数
- logging.Formatter():配置了日志时间格式,在里边自定义设置时间和日期,输出日志的时候将会按照设置的格式显示内容。
- logger.setLevel():设置日志级别
- logger.addHandler()和logger.removeHandler():添加和删除一个Handler
- logger.Handler: Handler基于日志级别对日志进行分发,如设置warning级别的Handler只会处理warning及以上级别的日志
3、Handler使用
不知道为啥basicConfig全局配置在我的环境中不能使用,因此先声明一个Logger对象,使用Handler来指定对象,使用Handler对象指定Formatter对象单独配置输出格式,最后给Logger对象添加对应的Handler即可,日志会被输出到output.log中,内容如下:
import logging
logger=logging.getLogger()
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler = logging.FileHandler('output.log')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.debug(u"这里可以采取debug、info的级别的内容也可以显示在控制台上了")
logger.info(u'info也能显示')
logging.warning(u"小泽玛利亚")
Handler种类
- StreamHandler:logging.StreamHandler;日志输出到流,可以是 sys.stderr,sys.stdout 或者文件。
- FileHandler:logging.FileHandler;日志输出到文件。
- BaseRotatingHandler:logging.handlers.BaseRotatingHandler;基本的日志回滚方式。
- RotatingHandler:logging.handlers.RotatingHandler;日志回滚方式,支持日志文件最大数量和日志文件回滚。
- TimeRotatingHandler:logging.handlers.TimeRotatingHandler;日志回滚方式,在一定时间区域内回滚日志文件。
- SocketHandler:logging.handlers.SocketHandler;远程输出日志到TCP/IP sockets。
- DatagramHandler:logging.handlers.DatagramHandler;远程输出日志到UDP sockets。
- SMTPHandler:logging.handlers.SMTPHandler;远程输出日志到邮件地址。
- SysLogHandler:logging.handlers.SysLogHandler;日志输出到syslog。
- NTEventLogHandler:logging.handlers.NTEventLogHandler;远程输出日志到Windows NT/2000/XP的事件日志。
- MemoryHandler:logging.handlers.MemoryHandler;日志输出到内存中的指定buffer。
- HTTPHandler:logging.handlers.HTTPHandler;通过”GET”或者”POST”远程输出到HTTP服务器。
Formatter
我们指定Formatter,传入fmt和datefmt参数,指定日志结果的输出格式和时间格式,然后handler通过setFormatter()方式设置此Formatter对象即可
- %(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: 打印日志信息
参考文献:
https://www.cnblogs.com/liuyanhang/p/10795522.html
https://www.cnblogs.com/xianyulouie/p/11041777.html
https://docs.python.org/3/howto/logging.html#logging-basic-tutorial