logging模块 (日志)
Posted huangjianfir
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了logging模块 (日志)相关的知识,希望对你有一定的参考价值。
import logging
-----*----通过logging.basciConfig 函数来调整日志输入格式 ----*----- #不灵活,不好用
logging.basicConfig(
level=logging.DEBUG, #修改了默认存入或者输出到屏幕的日志级别
filename=‘log_test.log‘, #如果不创建日志文件存储,直接输出到屏幕
filemode=‘w‘, #如果不定义,直接默认追加 注意追加是整体追加
format=‘%(asctime)s %(filename)s %(levelname)s %(message)s %(lineno)d‘,
#指定格式的输出日志文件 %()s固定格式,括号里面加内容 时间 执行文件 等级名 日志内容
)
#stream 默认输出屏幕 有filename情况下有存储日志文件 直接忽略stream
#datefmt 指定日期时间格式
#format 参数可能用到格式化字符串
#%(name)s 执行操作日志文件的用户名 默认root用户
#%(levelname)s 文本日志级别
#%(levelno)s 数字形式日志级别
#%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
#%(filename)s 调用日志输出函数的模块的文件名
#%(module)s 调用日志输出函数的模块名
#%(funcName)s 调用日志输出函数的函数名
#%(lineno)d 调用日志输出函数的语句所在代码的行 就是生成数据的代码在第几行
#%(asctime)s 默认格式输出字符串时间
#%(thread)s 线程ID,可能没有
#%(threadName)s 线程名,可能没有
#%(process)d 进程ID,可能没有
#%(message)s 用户的输出信息
logging.debug("this is debug message")
logging.info("this is info message")
logging.warning(‘this is warning message‘)
logging.error(‘this is error massage‘)
logging.critical(‘this is critical massage‘)
#logging 日志采用五个级别来记录日志 默认记录warning,error,critical 三个级别的日志
#info是正常的日志内容 想要更改日志的一些基本设定,在longging.basicConfig中修改
import logging
logger = logging.getLogger() #创建一个logger对象 以后的操作写日志都是对这个对象的操作
#注意,不填默认是根对象 填写的话就是根对象下面的子对象
#这个是一个树形结构,以对象名来判定是不是一个对象
FW = logging.FileHandler(‘loger_test.log‘) #写入文件保存日志功能
SW = logging.StreamHandler() #输出日志到屏幕上功能
FW.setFormatter(logging.Formatter(‘%(asctime)s %(levelname)s %(message)s ‘)) #对于写入文件自定义格式
logger.addHandler(FW) #开始logger对象是空,什么方法本事没有,吸取存储日志到文件的本领
logger.addHandler(SW) #吸取日志输出到屏幕的本领
logger.setLevel(‘DEBUG‘) #把对象设定日志级别 注意里面大写
logger.debug(‘this is debug‘)
logger.info(‘this is info‘)
logger.warning(‘this is warning‘)
logger.error(‘this is error‘)
logger.critical(‘this is critical‘)
以上既可以输出到文件存储起来,还可以输出到屏幕上 且可以定义一个函数包含次功能,要写日志直接调用此函数,方便扩展改进
def rizhi():
import logging
logger = logging.getLogger() #创建一个logger对象 以后的操作写日志都是对这个对象的操作
#注意,不填默认是根对象 填写的话就是根对象下面的子对象
#这个是一个树形结构,以对象名来判定是不是一个对象
FW = logging.FileHandler(‘loger_test.log‘) #写入文件保存日志功能
SW = logging.StreamHandler() #输出日志到屏幕上功能
FW.setFormatter(logging.Formatter(‘%(asctime)s %(levelname)s %(message)s ‘)) #对于写入文件自定义格式
logger.addHandler(FW) #开始logger对象是空,什么方法本事没有,吸取存储日志到文件的本领
logger.addHandler(SW) #吸取日志输出到屏幕的本领
logger.setLevel(‘DEBUG‘) #把对象设定日志级别 注意里面大写
return logger
rizhi().debug(‘this is debug‘)
rizhi().info(‘this is info‘)
rizhi().warning(‘this is warning‘)
rizhi().error(‘this is error‘)
rizhi().critical(‘this is critical‘)
注意两个坑,首先 如果是子对象,对象名一样的话其实是对一个对象进行操作 子对象进行日志写入的话,写完后会看其父辈对象有没有工作过,有的话,则会再次写入一遍
import logging
loger = logging.getLogger() #默认不写根对象
loger1 = logging.getLogger(‘erzi‘) #子对象
FW = logging.FileHandler(‘test‘) #存日志功能
SW = logging.StreamHandler() #输出日志到屏幕功能
FW.setFormatter(format(‘%(asctime)s %(levelname)s %(message)s‘)) #自定义存储日志的格式
SW.setFormatter(logging.Formatter(‘%(asctime)s %(levelname)s %(message)s‘)) #自定义输出屏幕的格式
loger.setLevel(‘DEBUG‘)
loger.addHandler(FW) #对象增加功能
loger.addHandler(SW)
loger1.addHandler(FW)
loger1.addHandler(SW)
loger.debug("this is debug message")
loger.info("this is info message")
loger.warning(‘this is warning message‘)
loger.error(‘this is error massage‘)
loger.critical(‘this is critical massage‘)
loger1.debug("this is debug message")
loger1.info("this is info message")
loger1.warning(‘this is warning message‘)
loger1.error(‘this is error massage‘)
loger1.critical(‘this is critical massage‘)
以上是关于logging模块 (日志)的主要内容,如果未能解决你的问题,请参考以下文章