@nemos
2017-05-05T15:16:21.000000Z
字数 3807
阅读 836
py
import loggingimport sys# 获取logger实例,如果参数为空则返回root loggerlogger = logging.getLogger("AppName")# 指定logger输出格式formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s')# 文件日志file_handler = logging.FileHandler("test.log")file_handler.setFormatter(formatter) # 可以通过setFormatter指定输出格式# 控制台日志console_handler = logging.StreamHandler(sys.stdout)console_handler.formatter = formatter # 也可以直接给formatter赋值# 为logger添加的日志处理器logger.addHandler(file_handler)logger.addHandler(console_handler)# 指定日志的最低输出级别,默认为WARN级别logger.setLevel(logging.INFO)# 输出不同级别的loglogger.debug('this is debug info')logger.info('this is information')logger.warn('this is warning message')logger.error('this is error message')logger.fatal('this is fatal message, it is same as logger.critical')logger.critical('this is critical message')# 2016-10-08 21:59:19,493 INFO : this is information# 2016-10-08 21:59:19,493 WARNING : this is warning message# 2016-10-08 21:59:19,493 ERROR : this is error message# 2016-10-08 21:59:19,493 CRITICAL: this is fatal message, it is same as logger.critical# 2016-10-08 21:59:19,493 CRITICAL: this is critical message# 异常捕获try:1 / 0except:# 等同于error级别,但是会额外记录当前抛出的异常堆栈信息logger.exception('this is an exception message')# 2016-10-08 21:59:19,493 ERROR : this is an exception message# Traceback (most recent call last):# File "D:/Git/py_labs/demo/use_logging.py", line 45, in# 1 / 0# ZeroDivisionError: integer division or modulo by zero

输出日志的对象,为单例
logger = logging.getLogger('name') # 获得实例logger.setLevel(logging.INFO)#指定最低的日志级别logger.addFilter()logger.removeFilter()logger.addHandler()logger.removeHandler()logger.debug()logger.info()logger.warning()logger.error()logger.critical()logger.log('debug', 'This is a bug') # 数直接输出内容并选择对应的告警级别
对log进行分发
handler = logging.FileHandler("test.log")handler.setLevel()handler.setFormatter()handler.addFilter()handler.removeFilter()
| 类型 | 说明 |
|---|---|
logging.StreamHandler([stream]) |
参数默认是sys.stderr,向任意流中输出log |
logging.FileHandler(filename[,mode]) |
mode为打开方式。默认为a,向一个文件输出日志。 |
logging.handlers.RotatingFileHandler(filename[, mode[, maxBytes[, backupCount]]]) |
可以管理文件大小,文件大小超过一定值,新建文件继续 |
logging.handlers.TimedRotatingFileHandler(filename [,when [,interval [,backupCount]]]) |
间隔时间自动创建新文件 |
logging.handlers.SocketHandler(host, port) |
TCP |
logging.handlers.DatagramHandler(host, port) |
UDP |
logging.handlers.SysLogHandler |
|
logging.handlers.NTEventLogHandler |
|
logging.handlers.SMTPHandler |
|
logging.handlers.MemoryHandler |
|
logging.handlers.HTTPHandler |
输出格式
formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s')
| 参数 | 说明 |
|---|---|
%(name)s |
Logger的名字 |
%(levelno)s |
数字形式的日志级别 |
%(levelname)s |
文本形式的日志级别 |
%(pathname)s |
调用日志输出函数的模块的完整路径名,可能没有 |
%(filename)s |
调用日志输出函数的模块的文件名 |
%(module)s |
调用日志输出函数的模块名 |
%(funcName)s |
调用日志输出函数的函数名 |
%(lineno)d |
调用日志输出函数的语句所在的代码行 |
%(created)f |
当前时间,用UNIX标准的表示时间的浮点数表示 |
%(relativeCreated)d |
输出日志信息时的,自Logger创建以 来的毫秒数 |
%(asctime)s |
字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒 |
%(thread)d |
线程ID。可能没有 |
%(threadName)s |
线程名。可能没有 |
%(process)d |
进程ID。可能没有 |
%(message)s |
用户输出的消息 |
在handler之上提供粒度判断
logging.basicConfig(level=logging.INFO,format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',datefmt='[%Y-%m_%d %H:%M:%S]',filename='../log/my.log',filemode='a')
logging.config.fileConfig(log_conf_file)
##############################################[loggers]keys=root, log02[logger_root]level=INFOhandlers=handler01[logger_log02]level=DEBUGhandler=handler02qualname=log02##############################################[handlers]keys=handler01,handler02[handler_handler01]class=FileHandlerlevel=INFOformatter=form01args=('../log/cv_parser_gm_server.log',"a")[handler_handler02]class=StreamHandlerlevel=NOTSETformatter=form01args=(sys.stdout,)##############################################[formatters]keys=form01,form02[formatter_form01]format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(process)d %(message)sdatefmt=[%Y-%m-%d %H:%M:%S][formatter_form02]format=(message)s##############################################