Python日志模块logging

logging的主要作用有2个:

1.代替print,可以把大部分你想要进行调试的信息打印出来或者输出到指定文件.

2.可以对输出的调试信息做分类输出,比如:

DEBUG,INFO,WARNING,ERROR,CRITICAL.

完整的日志包含收集和输出,默认只收集和输出warnning以上的级别

 

为解决这个问题我们需要自定义收集级别和输出级别:

formate格式:%(asctime)s-%(levelname)s-%(filename)s-%(name)s-日志信息:%(message)s

%(name)s

Logger的名字

%(levelno)s

数字形式的日志级别

%(levelname)s

文本形式的日志级别

%(pathname)s

调用日志输出函数的模块的完整路径名,可能没有

%(filename)s

调用日志输出函数的模块的文件名

%(module)s

调用日志输出函数的模块名

%(funcName)s

调用日志输出函数的函数名

%(lineno)d

调用日志输出函数的语句所在的代码行

%(created)f

当前时间,用UNIX标准的表示时间的浮 点数表示

%(relativeCreated)d

输出日志信息时的,自Logger创建以 来的毫秒数

%(asctime)s

字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒

%(thread)d

线程ID。可能没有

%(threadName)s

线程名。可能没有

%(process)d

进程ID。可能没有

%(message)s

用户输出的消息

结果:控制台输出:

文件输出:

 

优化为工具类:

import logging

class Mylog:
    def my_logger(self,level,msg):
        # 定义一个收集器
        my_logger = logging.getLogger("pythonStudy")
        # 设置级别
        my_logger.setLevel("DEBUG")
        # 设置输出格式信息
        formater = logging.Formatter("%(asctime)s-%(levelname)s-%(filename)s-%(name)s-日志信息:%(message)s")

        # 创建一个输出渠道:控制台
        outLog = logging.StreamHandler()
        # 设置级别
        outLog.setLevel("ERROR")
        outLog.setFormatter(formater)

        # 创建一个输出渠道:文件,文件自动创建
        outfile = logging.FileHandler("myLogFile", encoding="utf-8")
        outfile.setLevel("DEBUG")
        outfile.setFormatter(formater)

        # 两者对接
        my_logger.addHandler(outLog)
        my_logger.addHandler(outfile)

        if level=="DEBUG":
            my_logger.debug(msg)
        elif level=="INFO":
            my_logger.info(msg)
        elif level=="WARNING":
            my_logger.warning(msg)
        elif level=="ERROR":
            my_logger.error(msg)
        elif level=="CRITICAL":
            my_logger.critical(msg)

        #关闭渠道:不然会生成重复日志
        my_logger.removeHandler(outLog)
        my_logger.removeHandler(outfile)
    #方法2:加入下面代码
    # def debug(self,msg):
    #     self.my_logger("DEBUG",msg)
    #
    # def info(self, msg):
    #     self.my_logger("INFO",msg)
    #
    # def warning(self,msg):
    #     self.my_logger("WARNING",msg)
    #
    # def error(self,msg):
    #     self.my_logger("ERROR",msg)
    #
    # def critical(self,msg):
    #     self.my_logger("CRITICAL",msg)

if __name__ == '__main__':
    #方法1:直接传入级别
    Mylog().my_logger("DEBUG","我是debug方法")
    Mylog().my_logger("ERROR", "我是error方法")
    Mylog().my_logger("CRITICAL", "我是critical方法")

    # 方法2,不传入级别
    # mylog = Mylog()
    # mylog.debug("这是一条debug信息")
    # mylog.critical("这是一条critical信息")
    # mylog.error("这是一个error信息")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值