简介
基本每种开发语言都有对应的logger库提供,以方便输出和记录logger。
python内也提供了logger包,可以方便地使用。
简单使用
- 首先,需要import日志包logger
import logging
- 获取logger对象
使用logging的getLogger(name=Null)来得到logger对象
logger = logging.getLogger("python-logger")
- 使用得到的logger对象
现在可以使用logger对象来进行日志记录了
logger.info("info msg")
logger.warning("warning msg")
logger.error("error msg")
- 使用logging的handler
如果要输出logger信息,我们需要为logger对象添加handler。否则,logger输出到哪里呢。
执行时就会提示No handlers could be found for logger "loggingtest"
stream_handler = logging.StreamHandler(sys.stderr)
logger.addHandler(stream_handler)
- 设置logger输出的level
在缺省下,logger的输出级别是logging.WARN,使用info输出的信息被滤掉了。
使用‘setLevel()’来设置logging-level.
logger.setLevel(logging.INFO)
在logging中定义了一下的level:
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
- 简单的完整示例
import sys,time
import logging
logger = logging.getLogger("loggingtest")
stream_handler = logging.StreamHandler(sys.stderr)
logger.addHandler(stream_handler)
logger.setLevel(logging.INFO)
logger.info("info msg")
logger.warning("warning msg")
logger.error("error msg1")
logger.error("error msg2")
logger.removeHandler(stream_handler)
输出
info msg
warning msg
error msg1
error msg2
更好地使用
上面是基本的学习,在程序中使用logging,还不够。
- 使用日志文件
一般我们要把日志输出到文件中,以便查看。这时使用FileHandler来处理。
先看一下FileHandler的定义
class FileHandler(StreamHandler):
"""
A handler class which writes formatted logging records to disk files.
"""
def __init__(self, filename, mode='a', encoding=None, delay=0):
使用就很简单了。
file_handler = logging.FileHandler("test-1.log")
logger.addHandler(file_handler)
在执行脚本,会创建test-1.log日志文件,并将上面的日志内容输出到文件中。
- 设置输出格式
没有设置输出的格式,缺省状态下,只会输出对应的字符串。我们想要更好的输出信息,可以设置格式。
先定义一个格式化对象,然后设置给handler。
formatter = logging.Formatter('%(name)-12s %(asctime)s.%(msecs)03d %(levelname)-8s %(message)s', datefmt='%Y-%m-%d,%H:%M:%S')
file_handler.setFormatter(formatter)
现在输出到日志中的信息就好多了。
- 示例程序
import sys,time
import logging
logger = logging.getLogger("loggingtest")
stream_handler = logging.StreamHandler(sys.stderr)
logger.addHandler(stream_handler)
file_handler = logging.FileHandler("test-1.log")
logger.addHandler(file_handler)
formatter = logging.Formatter('%(name)-12s %(asctime)s.%(msecs)03d %(levelname)-8s %(message)s', datefmt='%Y-%m-%d,%H:%M:%S')
file_handler.setFormatter(formatter)
logger.setLevel(logging.INFO)
logger.info("info msg")
logger.warning("warning msg")
logger.error("error msg1")
logger.error("error msg2")
# logger.removeHandler(stream_handler)
- 日志logger的多handler对象
如上面的示例,为logger添加了2个handler: 一个文件处理的FileHandler、一个StreamHandler,日志会分别到达这2个handler。