python如何用 logging 实现控制台和文本同时输出?

方式一:用函数的方式实现

import logging

# 第一步:创建日志器
logger = logging.getLogger("XX科技公司")
# 第二步:定义处理器。控制台和文本输出两种方式
console_handler = logging.StreamHandler()
file_handler = logging.FileHandler("./new.log",mode='a',encoding='utf-8')
# 第三步:设置的不同的输入格式
console_fmt = "%(name)s-->%(levelname)s-->%(asctime)s"
file_fmt = "%(lineno)d-->%(asctime)s-->%(levelname)s"
# 第三步:格式
fmt1 = logging.Formatter(fmt=console_fmt)
fmt2 = logging.Formatter(fmt=file_fmt)
# 第四步:把格式传给处理器
console_handler.setFormatter(fmt1)
file_handler.setFormatter(fmt2)
# 第五步:把处理器传个日志器
logger.addHandler(console_handler)
logger.addHandler(file_handler)


logger.debug("debug 信息")
logger.info("info 信息")
logger.warning("warning 信息")
logger.error("error 信息")
logger.critical("critical 信息")

 

 

 方式二:用类的方式实现

import logging

class Log():

    def __init__(self,level="DEBUG"):
        # 日志器对象
        self.log = logging.getLogger('XX公司')
        self.log.setLevel(level)

    def console_handle(self,level="DEBUG"):
        '''控制台处理器'''
        console_handle = logging.StreamHandler()
        console_handle.setLevel(level)
        # 处理器添加格式器
        console_handle.setFormatter(self.get_formatter()[0])
        return console_handle

    def  file_handle(self,level="DEBUG"):
        '''文件处理器'''
        file_handler = logging.FileHandler("./demo2.log",mode="a",encoding="utf-8")  # 注①
        file_handler.setLevel(level)
        file_handler.setFormatter(self.get_formatter()[1])
        return file_handler

    def get_formatter(self):
        '''格式器'''
        # 定义输出格式
        console_fmt = logging.Formatter(fmt="%(name)s--%(levelname)s--%(asctime)s--%(message)s")
        file_fmt = logging.Formatter(fmt="%(levelname)s--%(asctime)s--%(message)s")
        return console_fmt,file_fmt

    def get_log(self):
        # 日志器添加控制台处理器
        self.log.addHandler(self.console_handle())
        # 日志器添加文件处理器
        self.log.addHandler(self.file_handle())
        # 返回日志实例对象
        return self.log

if __name__ == '__main__':
    log = Log()
    logger = log.get_log()
    logger.info("第一条信息")
    logger.info("第二条信息")
# 注①
# project_path = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))  # 项目路径 .../project1 可以考虑增加项目路径
# 项目路径增加方法 https://www.cnblogs.com/juankai/p/11580122.html

 参考资料:

https://www.bilibili.com/video/BV1aQ4y1R7Z6?p=3&vd_source=6176e79b66461eb74da787cb8321925b

posted @ 2022-08-06 15:37  o蹲蹲o  阅读(1507)  评论(0编辑  收藏  举报