在编写程序中添加一大堆的代码就不是那么愉快的事情,好在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")
运行程序,应该看到的结果
还会在当前目录下,生成一个mylog.log文件,内容如下
下面再写一个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")
运行结果如下
还会在当前目录下生成一个testMylog.log
在编程时,有时为了查看程序的进度和参数变化,在程序中间插入了大量的print.检查完毕后又要诼个删除,费时费力,使用log后就简单多了,直接保存为日志文件即可