def basicConfig(**kwargs):
_acquireLock()
try:
if len(root.handlers) == 0:
filename = kwargs.get("filename")
if filename:
mode = kwargs.get("filemode", 'a')
hdlr = FileHandler(filename, mode)
else:
stream = kwargs.get("stream")
hdlr = StreamHandler(stream)
fs = kwargs.get("format", BASIC_FORMAT)
dfs = kwargs.get("datefmt", None)
fmt = Formatter(fs, dfs)
hdlr.setFormatter(fmt)
root.addHandler(hdlr)
level = kwargs.get("level")
if level is not None:
root.setLevel(level)
finally:
_releaseLock()
Loggers are never instantiated directly,but always through the module-level function logging.getLogger(name).
logger对象不能直接通过Logger类实例,都是通过模块级函数logging.getLogger(name)调用产生的。
Mutiple calls to getLogger() with the same name will always return a refernece to the same Logger object.
Logger的继承关系除了可以继承父级的一些东西如level(getEffectiveLevel())。还可以通过继承关系将LogRecord向上传播。
logger经常使用的方法:
logger.info()
logger.debug()
logger.setLevel
logger.getEffectiveLevel()
logger.getChild(suffix) 返回一个子logger,子logger的名字会是父logger名字加上suffix
logger.addFilter(filt)
logger.removeFilter(filt)
logger.addHandler(hd)
logger.removeHandler(hd)
Handler
Handler是一个基础类,其它不同类型的handler都是继承于它。同样,handler也不会直接实例化对象,而是使用它的子类。
常用类型Handler
StreamHandler logging
FileHandler logging
NullHandler loggging
BaseRotatingHandler logging.handlers
RotatingFileHandler logging.handlers
TimedRotatingFileHandler logging.handlers
SocketHandler logging.handlers
等等。。。
Handler常用方法:
Handler.addFilter()
Handler.removeFilter()
Handler.setFormatter()
Handler.setLevel()
Formatter该类对象是用于对LogRecord进行格式化处理的。
Formtter对象的初始化需要指定日志字符串格式,还可以指定时间格式,和格式化字符串使用的风格。
Fomatter对象是添加到Handler对象中的。