python-自定义模块mylog

发布时间:2017-12-11 21:22:59编辑:Run阅读(3811)

    在编写程序中添加一大堆的代码就不是那么愉快的事情,好在python有强大的import,完全可以先配置好一个mylog.py,以后需要使用时直接导入mylog.py模块即可

    编写mylog.py,代码如下

    #!/usr/bin/env python
    # coding: utf-8
    __author__ = 'www.py3study.com'
    import logging
    import getpass
    import sys
    
    #定义类
    class MyLog(object):
        '''这个类用于创建一个自用的log'''
        def __init__(self):
            user = getpass.getuser()
            self.logger = logging.getLogger(user)
            self.logger.setLevel(logging.DEBUG)
            logfile = sys.argv[0][0:-3] + '.log' #日志文件名
            formatter = logging.Formatter('%(asctime)-12s %(levelname)-8s %(name)-10s %(message)-12s')
            '''日志显示到屏幕上并输出到日志文件内'''
            logHand = logging.FileHandler(logfile)
            logHand.setFormatter(formatter)
            logHand.setLevel(logging.ERROR)  #只有错误才会被记录到logfile中
            
            logHandst = logging.StreamHandler()
            logHandst.setFormatter(formatter)
            self.logger.addHandler(logHand)
            self.logger.addHandler(logHandst)
    
        '''日志的5个级别对应以下的5个函数'''
        def debug(self, msg):
            self.logger.debug(msg)
    
        def info(self, msg):
            self.logger.info(msg)
    
        def warn(self, msg):
            self.logger.info(msg)
    
        def error(self, msg):
            self.logger.error(msg)
    
        def critical(self, msg):
            self.logger.critical(msg)
    
    if __name__ == '__main__':
        mylog = MyLog()
        mylog.debug("I'm debug")
        mylog.info("I'm info")
        mylog.warn("I'm warn")
        mylog.error("I'm error")
        mylog.critical("I'm critical")

    运行程序,应该看到的结果

    blob.png

    还会在当前目录下,生成一个mylog.log文件,内容如下

    blob.png

    下面再写一个testMylog.py,在程序中导入上面的mylog.py作为模块使用

    编写testMylog.py,代码如下

    #!/usr/bin/env python
    # coding: utf-8
    __author__ = 'www.py3study.com'
    #导入之前的模块
    from mylog import MyLog
    
    if __name__ == '__main__':
        ml = MyLog()
        ml.debug("I am debug message")
        ml.info("I am info message")
        ml.warn("I am warn message")
        ml.error("I am error message")
        ml.critical("I am critical message")

    运行结果如下

    blob.png

    还会在当前目录下生成一个testMylog.log

    blob.png

    在编程时,有时为了查看程序的进度和参数变化,在程序中间插入了大量的print.检查完毕后又要诼个删除,费时费力,使用log后就简单多了,直接保存为日志文件即可

关键字