参考:www.cnblogs.com/alex3714/articles/5161349.html
写入日志,运行一次,之后会一直追加到该文件,不会覆盖原来信息
import logging logging.basicConfig(filename="log.log") logging.debug("logging.debug") logging.info("logging.info") logging.warning("logging.warning") logging.error("logging.error") ''' 结果:默认只写入等级为warning以及error的 WARNING:root:logging.warning ERROR:root:logging.error '''
指定写入等级
import logging logging.basicConfig(filename="log.log",level=logging.DEBUG) logging.debug("logging.debug") logging.info("logging.info") logging.warning("logging.warning") logging.error("logging.error") ''' 结果:这里指定了等级debug之上的都能记录 DEBUG:root:logging.debug INFO:root:logging.info WARNING:root:logging.warning ERROR:root:logging.error '''
- python使用logging模块纪录日志涉及四个主要类
- logger提供了应用程序可以直接使用的接口;
- handler将(logger创建的)日志纪录发送到合适的目的输出;
- filter提供了细度设备来决定输出哪条日志纪录;
- formatter决定日志纪录的最终输出格式。
%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathoname)s 调用日志输出函数的模块的完整路径吗,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的标准时间的浮点数
%(relativeCreated)d 输出日志信息时 自Logger创建以来的好秒数
%(asctime)s 字符串形式的当前时间爱你。默认格式为"2003-07-08 16:49:45,896" 逗号后面的是毫秒
%(thread)d 线程ID。可能没有
%(threadName)s 线程名,可能没有
%(process)d 进程ID,可能没有
%(message)s 用户输出的信息
import logging logging.basicConfig(filename="log.log", level=logging.DEBUG, format="%(asctime)s %(filename)s:%(lineno)d - %(levelname)s: %(message)s", datefmt="%m/%d/%Y %I:%M:%S %p") logging.debug("logging.debug") logging.info("logging.info") logging.warning("我的logging.warning") logging.error("logging.error")
import logging logger = logging.getLogger("test.log")#设定日志放置位置 logger.setLevel(logging.DEBUG)#设定日志写入的等级 ch = logging.StreamHandler()#增加一个handler,这里是用于打印屏幕的handler ch.setLevel(logging.WARNING)#设置打印到屏幕的等级,为了区分,这里设置与上面不同 fh = logging.FileHandler("access.log",encoding="utf-8")#定义屏幕日志放置文件名 fh.setLevel(logging.ERROR)#定义放置到屏幕文件的等级为error的 #定义屏幕日志写入格式 fh_format = logging.Formatter("%(asctime)s %(filename)s:%(lineno)d - %(levelname)s: %(message)s") fh.setFormatter(fh_format) #定义屏幕显示写入的格式 ch_format = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") ch.setFormatter(ch_format) #将fh,ch加入到logger里 logger.addHandler(fh) logger.addHandler(ch) logger.warning("logging.warning") logger.error("logging.error")
文件自动截断功能
import logging from logging import handlers logger = logging.getLogger("test") log_file = "timelog.log" #根据文件大小截断,之类是10字节,文件个数最多为3 fh = handlers.RotatingFileHandler(filename=log_file,maxBytes=10,backupCount=3) #根据文件时间截断,这里5秒,文件最多生成3个,when,S:秒 M:分 H:小时 W:每星期,interval == 0,则是周一 midnight表示每天凌晨 # fh = handlers.TimedRotatingFileHandler(filename=log_file,when="S",interval=5,backupCount=3) formatter = logging.Formatter('%(asctime)s %(module)s:%(lineno)d %(message)s') fh.setFormatter(formatter) logger.addHandler(fh) logger.warning("test1") logger.warning("test12") logger.warning("test13") logger.warning("test14") logger.warning("test15") logger.warning("test16")
import logging from logging import handlers logger = logging.getLogger("test") log_file = "timelog.log" #根据文件时间截断,这里5秒,文件最多生成3个,when,S:秒 M:分 H:小时 W:每星期,interval == 0,则是周一 midnight表示每天凌晨 fh = handlers.TimedRotatingFileHandler(filename=log_file,when="S",interval=5,backupCount=3) formatter = logging.Formatter('%(asctime)s %(module)s:%(lineno)d %(message)s') fh.setFormatter(formatter) logger.addHandler(fh) import time logger.warning("test1") time.sleep(2) logger.warning("test12") time.sleep(2) logger.warning("test13") logger.warning("test14") time.sleep(2) logger.warning("test15") logger.warning("test16")