python3中想要将程序的日志打印到文件中,便于后期查看原因。但是在开发阶段又想让日志打印到控制台,这时候可以用一个类将其封装起来,用法就跟java差不多,配置也很简单。
需要用到python内置模块 logging 和其中的函数handlers。
直接上代码:
import logging
from logging import handlers
# 日志输出
class Logger(object):
# 日志级别关系映射
level_relations = {
"debug": logging.DEBUG,
"info": logging.INFO,
"warning": logging.WARNING,
"error": logging.ERROR,
"critical": logging.CRITICAL
}
def __init__(self, filename="../log/test.log", level="info", when="D", backupCount=3, fmt="%(asctime)s - %(pathname)s[line:%(lineno)d] - %"
"(levelname)s: %(message)s"):
# 设置日志输出格式
format_str = logging.Formatter(fmt)
# 设置日志在控制台输出
streamHandler = logging.StreamHandler()
# 设置控制台中输出日志格式
streamHandler.setFormatter(format_str)
# 设置日志输出到文件(指定间隔时间自动生成文件的处理器 --按日生成)
# filename:日志文件名,interval:时间间隔,when:间隔的时间单位, backupCount:备份文件个数,若超过这个数就会自动删除
fileHandler = handlers.TimedRotatingFileHandler(filename=filename, when=when, backupCount=backupCount, encoding="utf-8")
# 设置日志文件中的输出格式
fileHandler.setFormatter(format_str)
# 设置日志输出文件
self.logger = logging.getLogger(filename)
# 设置日志级别
self.logger.setLevel(self.level_relations.get(level))
# 将输出对象添加到logger中
self.logger.addHandler(streamHandler)
self.logger.addHandler(fileHandler)
用法就跟java一样,创建一个Logger对象,通过对象去操作。
log = Logger(level="debug").logger
log.debug("debuf")
log.info("info")
log.warning("warning")
log.error("error")
可以在控制台中看到如下打印信息:
2019-07-02 21:32:25,553 - E:/python/ryan_py/tsunagaru/logger.py[line:30] - DEBUG: debuf
2019-07-02 21:32:25,625 - E:/python/ryan_py/tsunagaru/logger.py[line:31] - INFO: info
2019-07-02 21:32:25,625 - E:/python/ryan_py/tsunagaru/logger.py[line:32] - WARNING: warning
2019-07-02 21:32:25,626 - E:/python/ryan_py/tsunagaru/logger.py[line:33] - ERROR: error
Process finished with exit code 0
同时,还可以看到在父级同级的目录下的/log中创建了一个名叫test.log的文件。
打开test.log文件,可以看到里面的内容跟控制台上的输出内容是一致的。
2019-07-02 21:32:25,553 - E:/python/ryan_py/tsunagaru/logger.py[line:30] - DEBUG: debuf
2019-07-02 21:32:25,625 - E:/python/ryan_py/tsunagaru/logger.py[line:31] - INFO: info
2019-07-02 21:32:25,625 - E:/python/ryan_py/tsunagaru/logger.py[line:32] - WARNING: warning
2019-07-02 21:32:25,626 - E:/python/ryan_py/tsunagaru/logger.py[line:33] - ERROR: error