warnings模块介绍 logging模块介绍 打印日志到控制台 打印日志到文件

2015-06-13 15:14:00
admin
原创 6209
摘要:warnings模块介绍 logging模块介绍 打印日志到控制台 打印日志到文件

一、warnings模块介绍

1、过滤器分类:Warning、UserWarning、SyntaxWarning,UserWarning是warn的默认分类;

2、过滤器动作:error、ignore、always、default,default表示同一个位置的告警只会触发一次;

3、warnings.warn(message[, category[, stacklevel]]),产生一个告警,stacklevel=1打印告警本身;

4、warnings.filterwarnings(action[, category[, lineno]]),增加一个过滤器,默认放在列表的最前面;

5、warnings.simplefilter(action[, category[, lineno]]),增加一个过滤器,不能指定message和module;

6、warnings.resetwarnings(),清除所有的过滤器,包括系统设置的过滤器;

7、warnings.filters,获取所有设置的过滤器,这是一个数组;

8、warnings.catch_warnings([*, record=False]),告警上下文管理器,临时忽略告警,临时把告警变成错误;


二、打印日志到控制台

1、logging线程安全,可以放心在多线程环境下打印日志;

2、logging默认输出日志到控制台,日志级别为WARNING,等于或大于该级别的日志会输出;
3、日志级别大小关系:CRITICAL > ERROR > WARNING > INFO > DEBUG,可以自定义日志级别;


logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')


三、打印日志到文件

1、filemode默认为a,追加日志;

2、level默认为WARNING;

3、filename和stream同时出现,优先使用filename;


FORMAT = '%(asctime)s.%(msecs)d|%(levelname)s| - %(message)s'
DATEFMT = '%Y-%m-%d %H:%M:%S'
logging.basicConfig(level=logging.DEBUG,
                format=FORMAT, datefmt=DATEFMT, filename='app.log', filemode='w')

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')


四、打印日志到控制台和文件

1、basicConfig的日志级别设置对所有handler有效;

2、日志级别=MAX(basicConfig.LogLvl, handle.LogLvl)


FORMAT = '%(asctime)s.%(msecs)d|%(levelname)s| - %(message)s'
DATEFMT = '%Y-%m-%d %H:%M:%S'
logging.basicConfig(level=logging.DEBUG, format=FORMAT, datefmt=DATEFMT)

console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
console.setFormatter(logging.Formatter(FORMAT, DATEFMT))
logging.getLogger('').addHandler(console)

fileLog = logging.FileHandler('app.log')
fileLog.setLevel(logging.DEBUG)
fileLog.setFormatter(logging.Formatter(FORMAT, DATEFMT))
logging.getLogger('').addHandler(fileLog)

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')


五、日志文件旋转

# -*- coding: utf-8 -*-
import logging
from logging.handlers import RotatingFileHandler

FORMAT = '%(asctime)s.%(msecs)d|%(levelname)s| - %(message)s'
DATEFMT = '%Y-%m-%d %H:%M:%S'
logging.basicConfig(level=logging.DEBUG, format=FORMAT, datefmt=DATEFMT)

rotateHandler = RotatingFileHandler('myapp.log', maxBytes=10*1024*1024, backupCount=5)
rotateHandler.setLevel(logging.DEBUG)
rotateHandler.setFormatter(logging.Formatter(FORMAT, DATEFMT))
logging.getLogger('').addHandler(rotateHandler)

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')


六、日志模块配置文件

[loggers]
keys=root,errout

[logger_root]
level=DEBUG
handlers=hd01,hd02
[logger_errout]
qualname=errout
propagate=0
level=DEBUG
handlers=hd01

[handlers]
keys=hd01,hd02

[handler_hd01]
class=StreamHandler
level=DEBUG
formatter=fmt01
args=(sys.stderr,)

[handler_hd02]
class=handlers.RotatingFileHandler
level=DEBUG
formatter=fmt01
args=('app.log', 'a', 10*1024*1024, 5)

[formatters]
keys=fmt01
[formatter_fmt01]
format=%(asctime)s.%(msecs)d|%(levelname)s| - %(message)s
datefmt=%Y-%m-%d %H:%M:%S


示例代码:

# -*- coding: utf-8 -*-
import logging
import logging.config

logging.config.fileConfig("log.conf")
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')
logging.getLogger('errout').info('to stderr')

发表评论
评论通过审核之后才会显示。