python基础 logging模块

wyqwilliam 2019-12-11

简单logging模块入门

import logging
#五种日志级别,默认输出到屏幕;默认打印warning级别及以上的日志
logging.debug("test debug")
logging.info("test info")
logging.warning("test warning")
logging.error("test error")
logging.critical("test critical")

#设置日志输出相关参数,filename 日志输出的文件路径,此时日志不在输出到文件。level 输出到文件的日志级别;format里面是时间格式与日志信息,datefmt为日志时间戳格式
#注意:logging.basicConfig之前不能使用logging打印日志否则logging.basicConfig不会把日志输出到文件,还是会输出到屏幕
logging.basicConfig(filename="test3",
                    level=logging.INFO,
                    format=‘%(asctime)s %(levelname)s %(message)s‘,
                    datefmt="%m/%d/%Y %I:%M:%S")
logging.warning("test warning")

日志格式中各个属性值的含义总结

%(names)s  logger的名字%(levelno)s  数字格式日志级别%(levelname)s  文字格式日志级别%(pathname)s 调用日志的函数模块完整路径%(filename)s  调用日志输出的模块文件名%(module)s 调用日志输出的函数模块名%(funcName)s 调用日志输出的函数的函数名%(lineno)d  调用日志输出函数的语句所在代码行%(created)f unix标准的时间戳格式时间%(relativeCreated)d Logger创建以来的毫秒数%(asctime)s 字符串格式的当前时间%(thread)s 线程id%(threadName)s 线程名%(process)d 进程id%(message)s 日志消息日志输出到不同文件
import logging
"""
python 使用logging模块涉及四个主要的类
logger 提供了应用程序能够直接使用的接口
handler将日志发送到合适的目的输出
filter提供过滤功能,决定输出哪条日志
formatter决定日志输出的最终格式
"""
#创建一个logger,并设置日志级别为debug
logger1 = logging.getLogger("logger_name")
logger1.setLevel(logging.DEBUG)

#创建一个屏幕输出的handler并设置日志级别为info
sh = logging.StreamHandler()
sh.setLevel(logging.INFO)

#创建一个文件输出的handler并设置日志界别为warning,输出日志文件为file_log
fh = logging.FileHandler("file_log.log")
fh.setLevel(logging.WARNING)

#设置日志格式,,此处的格式与logging.basicConfig参数含义相同,name是对应logging.getLogger的实参
formatter1 = logging.Formatter(‘%(asctime)s %(levelname)s %(name)s %(message)s‘)

#将日志格式添加到handler上,不同format可以关联到不同hd上
sh.setFormatter(formatter1)
fh.setFormatter(formatter1)

#将hd于logger关联,一次只能关联一个
logger1.addHandler(sh)
logger1.addHandler(fh)

logger1.error("test error")
logger1.info("test info")
"""
屏幕输出
2019-12-11 21:54:10,961 ERROR logger1 test error
2019-12-11 21:54:10,961 INFO logger1 test info
文件输出
2019-12-11 21:54:10,961 ERROR logger1 test error
"""


日志切分

#日志的自动切割,需要单独导入handlers
from logging import handlers
logger2 = logging.getLogger(__name__) #将此程序的名字传入
#创建handler且指定文件切割的方式,每个文件存储3个字节日志,保留最近的3个文件并设置文件级别
fh1 = handlers.RotatingFileHandler(filename="split_byte.log", maxBytes=2, backupCount=3)
#创建handler且指定文件以时间为标准进行切割,每隔5秒切割一次,最多保留3个文件。 S秒 H小时 M分钟 D天 W每星期(interval==0代表星期一) midnight每天凌晨
fh2 = handlers.TimedRotatingFileHandler(filename="split_time", when="S", interval=5, backupCount=3)
fh1.setLevel(logging.INFO)
fh1.setFormatter(formatter1)
logger2.addHandler(fh1)
logger2.warning("this is a waring log,split log test xxxxxxxdddddddddddddddddddddddddddddddddddd")
logger2.warning("this is a waring log,split log test xxxxxxx")
 

相关推荐