1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【Python日志输出】控制台输出INFO和WARNING级别 文件只记录WARNING级别

【Python日志输出】控制台输出INFO和WARNING级别 文件只记录WARNING级别

时间:2022-06-01 22:31:41

相关推荐

【Python日志输出】控制台输出INFO和WARNING级别 文件只记录WARNING级别

参考博客 - Python日志分级别输出到不同文件

参考思路:为logger设置2个handler,再对2个handler设置不同的filter进行日志过滤。

通过supervisor管理项目时,会有stdout和stderr两种日志路径的设置方式,通过给一个logger设置2个StreamHandler后,分别对handler设置日志级别的过滤,实现日志的分级输出。

# -*- coding: utf-8 -*-import loggingimport logging.handlersimport osdef setup_logger(logger_name):# root_path = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))root_path = os.path.abspath(os.path.join(os.getcwd(), "../..")) # 与项目根目录平级log_path = root_path + '/logs/' + logger_name + '.log'myapp = logging.getLogger(logger_name)myapp.setLevel(logging.INFO) # 先将INFO及以上的日志都添加到logger,再按照是否WARNING过滤是否输出到文件formatter = logging.Formatter("%(asctime)s - %(filename)s - %(funcName)s[line:%(lineno)d] - %(levelname)s: %(message)s")rotatingHandler = logging.handlers.RotatingFileHandler(log_path, maxBytes=20 * 1024 * 1024, backupCount=10)rotatingHandler.setFormatter(formatter)myapp.addHandler(rotatingHandler)streamHandler = logging.StreamHandler()streamHandler.setFormatter(formatter)myapp.addHandler(streamHandler)# 过滤级别:控制台输出INFO和WARNING级别,文件只记录WARNING级别info_filter = logging.Filter()info_filter.filter = lambda record: record.levelno < logging.WARNING # 设置过滤等级err_filter = logging.Filter()err_filter.filter = lambda record: record.levelno >= logging.WARNING# streamHandler.addFilter(info_filter)rotatingHandler.addFilter(err_filter)# 示例def main():# setup_logger('log1', r'log1.log')# setup_logger('log2', r'log2.log')# log1 = logging.getLogger('log1')setup_logger('myapp')myapp = logging.getLogger('myapp')myapp.info("file test")myapp.warning("file warning")if __name__ == '__main__':main()# print(os.path.abspath(os.path.join(os.getcwd(), "../..")))

效果

控制台输出INFO和WARNING级别,文件只记录WARNING级别

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。