以下是mylogger.py
的内容:
def get_logger(name='my_super_logger'):
log = logging.getLogger(name)
log.setLevel(logging.DEBUG)
formatter = logging.Formatter(fmt='%(asctime)s %(name)s %(message)s',
datefmt='%m/%d/%Y %I:%M:%S %p')
if not len(log.handlers):
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
log.addHandler(ch)
# print(id(log))
return log
以下是myscript.py
的内容:
from mylogger import get_logger
_logger = get_logger()
_logger.info('trying info')
_logger.debug('trying debug')
但是我面临两个问题。它打印日志两次,格式化程序不能每次都工作:
09/18/2015 09:59:54 PM my_super_logger trying info
INFO:my_super_logger:trying info
09/18/2015 09:59:54 PM my_super_logger trying debug
DEBUG:my_super_logger:trying debug
我的get_logger
代码究竟出现了什么问题?
我需要自定义格式。但是我发现如果不添加处理程序,我就无法添加formatter
。这就是我添加StreamHandler
的原因。此answer中提到了if
阻止的原因。没有它,我会打印重复的日志消息。
答案 0 :(得分:2)
根记录器也在发出消息。使用以下命令停止传播到根目录:
function slideHandler (event, ui){
$('#lower-cut-off').val( ui.values[0] + "%");
}
$( "#slider" ).slider({
min : 0,
max : 100,
values : [ 20 , 80],
slideLower : slideHandler,
slide: slideHandler
});
如果要格式化所有日志输出(以便将消息传播到记录器),请设置根记录器的格式化程序。
您可以通过logging.basicConfig()
调用来执行此操作,前提是还没有任何内容发送到记录器,或者循环遍历根记录器的log.propagate = False
列表;如果您愿意,可以挑选任何logger.handlers
:
StreamHandlers