本文介绍如何封装一个简单的日志配置类
- 自定义handler,输出到你的控制台
- 清晰的设置过滤等级
- 项目全局使用app.调用
- 设置自己喜欢的输出格式
编写log_setting.py
#!/usr/bin/env python
# coding=utf-8
"""
# :author: Terry Li
# :url: https://blog.csdn.net/qq_42183962
# :copyright: © 2020 Terry Li
# :motto: I believe that the God rewards the diligent.
"""
import logging
class setLog:
def __init__(self, cmd_level=logging.DEBUG, filter_level=None, logger_name="app"):
self.app = None
self.logger_name = logger_name
self.cmd_log_level = cmd_level
self.cmd_handler = logging.StreamHandler()
self.log_handler_global_setting()
if filter_level:
self.set_filter(filter_level)
def log_handler_global_setting(self):
"""设置StreamHandler并且添加到rootLogger中"""
self.app = logging.getLogger(self.logger_name)
self.app.setLevel(logging.DEBUG)
self.cmd_handler.setLevel(logging.getLevelName(self.cmd_log_level))
formatter = logging.Formatter(
"%(asctime)s\t[%(filename)s-%(funcName)s]-[line:%(lineno)d]-%(levelname)s:%(message)s")
self.cmd_handler.setFormatter(formatter)
self.app.addHandler(self.cmd_handler)
def set_filter(self, level):
"""输出过滤器:控制台只输出你设置好的等级"""
info_filter = logging.Filter()
info_filter.filter = lambda record: record.levelno == level
self.cmd_handler.addFilter(info_filter)
# cfg = setLog(filter_level=logging.INFO)
# app = cfg.app
if __name__ == '__main__':
def test_print_all_log():
"""
1. 日志打印测试: 默认输出全部等级[debug|info|warning|error]
"""
log_cfg = setLog()
test_app = log_cfg.app
test_app.debug("debug")
test_app.info("info")
test_app.warning("warning")
test_app.error("error")
test_print_all_log()
def test_only_print_log_of_debug_level():
"""
2. 日志打印测试: 设置过滤等级,使控制台只输出debug
"""
log_cfg = setLog(filter_level=logging.DEBUG)
test_app = log_cfg.app
test_app.debug("debug")
test_app.info("info") # 被过滤
test_app.warning("warning") # 被过滤
test_app.error("error") # 被过滤
test_only_print_log_of_debug_level()
""">>>>>>>项目的其他模块怎么调用?<<<<<<<<
1.取消40、41行的注释
2.统一用app.来调用即可,如下所示
from .log_setting import app
app.info("Hello Python!")
"""