python课堂整理30---- logger模块
logger模块,关于日志的一系列操作
两种使用方法
一、
import logging logging.basicConfig( level = logging.DEBUG, #设置级别 filename = "logger.log", #写入文件 filemode = "w", #不写这句默认为追加的模式 format = "%(asctime)s %(filename)s %(lineno)d %(message)s" #分别设置时间、文件名、程序位置、日志内容 ) logging.debug("debug message") logging.info("info message") logging.warning("warning message") logging.error("error message") logging.critical('critical message')
format 参数中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levename)s文本形式的日志级别
%(filename)s 调用日志输出函数的模块的文件名
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(module)s调用日志输出函数的模块名
%(funcName)s调用日志输出函数的函数名
%(lineno)d调用日志输出函数的语句所在的代码行
%(created)f当前时间,用UNIX标准的表示时间的浮点数表示
%(relativeCreated)d输出日志信息时的,自Logger创建以来的毫秒数
%(asctime)s字符串形式的当前时间。默认格式是“2003-07-08 16:49:45,896"。逗号后面的是毫秒
%(lineno)d调用日志输出函数的语句所在的代码行
%(created)f当前时间,用UNIX标准的表示时间的浮点数表示
%(relativeCreated)d输出日志信息时的,自Logger创建以来的毫秒数
%(asctime)s字符串形式的当前时间。默认格式是“2003-07-08 16:49:45,896"。逗号后面的是毫秒
%(thread)d线程ID。可能没有
%(threadName)s线程名。可能没有
%(threadName)s线程名。可能没有
%(process)d进程ID,可能没有
%(message)s用户输出的消息
二、
import logging def logger(): logger = logging.getLogger() #不写参数默认为root用户 fh = logging.FileHandler("TEST_log") #这里参数为文件名或路径,向文件输入内容 ch = logging.StreamHandler() #向屏幕输入内容 fm = logging.Formatter("%(asctime)s %(message)s)") #设置格式 fh.setFormatter(fm) #加入格式 ch.setFormatter(fm) #加入格式 logger.addHandler(fh) #把fh功能加入logger对象 logger.addHandler(ch) #把ch功能加入logger对象 logger.setLevel("DEBUG") #设置级别 return logger logger = logger() #调用函数 logger.debug("debug") logger.info("info") logger.warning("warning") logger.error("error") logger.critical("critical")
import logging # def logger(): logger1 = logging.getLogger("mylogger")#不写参数默认为root用户 logger1.setLevel("DEBUG") logger2 = logging.getLogger("mylogger") logger2.setLevel("INFO") fh = logging.FileHandler("my_new.log") #这里参数为文件名或路径,向文件输入内容 ch = logging.StreamHandler() #向屏幕输入内容 fm = logging.Formatter("%(asctime)s %(message)s)") #设置格式 fh.setFormatter(fm) ch.setFormatter(fm) logger1.addHandler(fh) logger2.addHandler(fh) logger1.addHandler(ch) logger2.addHandler(ch) # return logger # logger1 = logger() logger1.debug("debug1") logger1.info("info1") logger1.warning("warning1") logger1.error("error1") logger1.critical("critical1") logger2.debug("debug2") logger2.info("info2") logger2.warning("warning2") logger2.error("error2") logger2.critical("critical2")
上面代码中,logger1和logger2中设置的级别不一样,但是输出的级别却是一样
因为用户参数用的都是 mylogger, 下面设置的级别把上面的覆盖了
特殊情况:
mport logging # def logger(): logger = logging.getLogger() logger1 = logging.getLogger("mylogger")#不写参数默认为root用户 # logger.setLevel("DEBUG") # logger1.setLevel("DEBUG") fh = logging.FileHandler("my_new.log") #这里参数为文件名或路径,向文件输入内容 ch = logging.StreamHandler() #向屏幕输入内容 fm = logging.Formatter("%(asctime)s %(message)s)") #设置格式 fh.setFormatter(fm) ch.setFormatter(fm) logger1.addHandler(fh) logger.addHandler(fh) logger1.addHandler(ch) logger.addHandler(ch) logger.debug("debug") logger.info("info") logger.warning("warning") logger.error("error") logger.critical("critical") logger1.debug("debug1") logger1.info("info1") logger1.warning("warning1") logger1.error("error1") logger1.critical("critical1")
当logger1里有参数,而且检测到有logger() 时,会把内容多打印一遍
一个奋斗中的产品小白