介绍连接: https://www.jianshu.com/p/7b5e4752932e
Python 中的 logging 模块可以让你跟踪代码运行时的事件,当程序崩溃时可以查看日志并且发现是什么引发了错误。
logging模块用于便捷记录日志且线程安全。
Log信息有内置的层级——调(debugging)、信息(informational)、警告(warnings)、错误(error)和严重错(critical)。
logging 模块可以:
控制信息层级,仅记录需要的信息。
控制显示或者保存日志的时机。
使用内置信息模板控制日志格式。
知晓信息来自于哪个模块。
import logging
logging.basicConfig(level=logging.WARNING)
def hypotenuse(a, b):
"""计算三角形斜边"""
return (a**2 + b**2)**0.5
kwargs = {'a':3, 'b':4, 'c':hypotenuse(3, 4)}
logging.debug("a = {a}, b = {b}".format(**kwargs))
logging.info("{a}, {b} 的斜边是 {c}".format(**kwargs))
logging.warning("a={a} 和 b={b} 相等".format(**kwargs))
logging.error("a={a} 和 b={b} 不能为负".format(**kwargs))
logging.critical("{a}, {b} 的斜边是 {c}".format(**kwargs))
2.1 基本设置 logging.basicConfig()
参数说明
2.2 日志级别(level)
只有大于当前日志等级的操作才会被记录。
import logging
logger = logging.getLogger("my_test")
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler("access.log")
fh.setLevel(logging.INFO)
ch = logging.StreamHandler()
ch.setLevel(logging.WARNING)
formatter = logging.Formatter("%(asctime)s :: %(levelname)s :: %(message)s")
fh.setFormatter(formatter)
ch.setFormatter(formatter)
logger.addHandler(fh)
logger.addHandler(ch)
logger.debug("I am debug")
logger.info("I am info")
logger.warning("I am warning")
logger.error("I am error")
logger.critical("I am critical")
3.1 Formatter 参数解读
常用参数说明
3.2 getLogger 创建对象
使用方法
logger = logging.getLogger(name)
3.3 setLevel 设置级别
使用方法
logger.setLevel(logging.DEBUG(级别))
3.4 FileHandler 与 StreamHandler 输出设置
斜体样式
fh = logging.FileHandler("access.log") #输出文件
ch = logging.StreamHandler() #输出命令行
3.5 setFormatter 匹配命令
fh.setFormatter(formatter)
ch.setFormatter(formatter)
3.6 addHandler 添加
将指定的处理程序hdlr添加到此记录器
logger.addHandler(fh)
logger.addHandler(ch)
3.7 debug info warning error critical
logger.debug("I am debug")
logger.info("I am info")
logger.warning("I am warning")
logger.error("I am error")
logger.critical("I am critical")
logging.debug("a = {a}, b = {b}".format(**kwargs))
logging.info("{a}, {b} 的斜边是 {c}".format(**kwargs))
logging.warning("a={a} 和 b={b} 相等".format(**kwargs))
logging.error("a={a} 和 b={b} 不能为负".format(**kwargs))
logging.critical("{a}, {b} 的斜边是 {c}".format(**kwargs))
logHelper基于logging,做了一些二次封装工作,主要实现设置日志级别、
格式化日志内容,将日志输出至文件中并可以自定义日志文件大小。
Arguments:
name: String. 此字段仅用于传入日志输出中一个名称字段
maxsize: String. 此字段用于自定义日志文件大小,单位为M
import logging
from logging.handlers import RotatingFileHandler
class LogHelper:
def __init__(self, name, maxsize):
"""
logHelper基于logging,做了一些二次封装工作,主要实现设置日志级别、
格式化日志内容,将日志输出至文件中并可以自定义日志文件大小。
Arguments:
name: String. 此字段仅用于传入日志输出中一个名称字段
maxsize: String. 此字段用于自定义日志文件大小,单位为M
"""
super().__init__()
# 是否回显标志
self.isEcho = False
# 创建logger实例,logging模块在使用之前首先需要创建这样的一个实例
self.logger = logging.getLogger(name)
# 默认设置为DEBUG级别,低于次级别的日志不会写入到文件中
self.logger.setLevel(level=logging.DEBUG)
# 格式化日志输出,目前格式为:时间 - 名称 - 级别 - 日志内容
self.formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 创建文件Handler,默认日志文件为同级目录下的log.txt文件,最大文件大小为初始化函数中传入,backupCount 为日志备份数量
self.fileHandler = RotatingFileHandler("log.txt", maxBytes=1024*1024*maxsize, backupCount=1)
# 设置文件输出的日志级别
self.fileHandler.setLevel(logging.DEBUG)
# 设置日志输出格式以及文件输出(此时不会在终端中输出)
self.fileHandler.setFormatter(self.formatter)
self.logger.addHandler(self.fileHandler)
def set_level(self, level):
"""设置日志级别
Arguments:
level: int. 日志级别. debug-10 info-20 warning-30 error-40 critical-50
"""
self.logger.setLevel(level)
self.fileHandler.setLevel(level)
def echo(self):
# 设置是否回显
self.isEcho = True
def debug(self, string):
# debug
self.logger.debug(string)
if self.isEcho:
return string
def info(self, string):
# info
self.logger.info(string)
if self.isEcho:
return string
def warning(self, string):
# warning
self.logger.warning(string)
if self.isEcho:
return string
def error(self, string):
# error
self.logger.error(string)
if self.isEcho:
return string
def critical(self, string):
# critical
self.logger.critical(string)
if self.isEcho:
return string
if __name__ == "__main__":
logHelper = LogHelper("test", 3)